Как распечатать часовой пояс для объекта времени в Python? - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь распечатать время с информацией о часовом поясе в виде строки в формате '%H:%M:%S%z'.Для этого я делаю следующее:

import pytz
import datetime

tz = pytz.timezone('Africa/Cairo')
time = datetime.datetime.strptime('14:24:41', '%H:%M:%S').time()
time = time.replace(tzinfo=tz)

print(time.strftime('%H:%M:%S%z'))

Результат, который я получаю, просто '14:24:41', даже после замены tzinfo.Что я здесь не так делаю?

РЕДАКТИРОВАТЬ Этот вопрос не является дубликатом, поскольку другой не объясняет, почему часовой пояс не печатается с использованием метода strftime().

1 Ответ

0 голосов
/ 23 декабря 2018

Из пакета datetime, %z равно

Смещение UTC в форме ± ЧЧММ [СС [.ffffff]] (пустая строка, если объектnaive).

и

Для простого объекта коды формата% z и% Z заменяются пустыми строками.Для осведомленного объекта:

% z

utcoffset () преобразуется в строку вида ± HHMM [SS [.ffffff]], где HH - двузначная строка, дающаячисло часов смещения UTC, MM - это двузначная строка, указывающая количество минут смещения UTC, SS - это двузначная строка, указывающая количество секунд смещения UTC, а ffffff - это 6-значная строка, указывающая число микросекунд смещения UTC..

Используя ваш пример кода, time.utcoffset() возвращается пустым.

Редактировать с исправлением

Возможно, вы захотите использовать метод .localize(), но для этого вам потребуется преобразовать строку в datetime.datetimeа не объект datetime.time.Это имеет смысл в некотором смысле: среда в 01:00 в Токио, вторник 1700 в Берлине.

import pytz
import datetime

tz = pytz.timezone('Africa/Cairo')
dt = datetime.datetime.strptime('14:24:41', '%H:%M:%S')
time = tz.localize(dt)

print(time.strftime('%H:%M:%S%z'))
...