Почему datetime предоставляет разные форматы часовых поясов для одного и того же часового пояса? - PullRequest
0 голосов
/ 07 сентября 2018
>>> now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
>>> dt = datetime(now.year, now.month, now.day, now.hour, now.minute, now.second, now.microsecond, pytz.timezone('Asia/Tokyo'))
>>> now
datetime.datetime(2018, 9, 7, 16, 9, 24, 177751, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)
>>> dt = datetime(now.year, now.month, now.day, now.hour, now.minute, now.second, now.microsecond, pytz.timezone('Asia/Tokyo'))
>>> dt
datetime.datetime(2018, 9, 7, 16, 9, 24, 177751, tzinfo=<DstTzInfo 'Asia/Tokyo' LMT+9:19:00 STD>)

Для now Я получил JST + 9: 00: 00 и для dt Я получил LMT + 9: 19: 00 . Я не понимаю, почему datetime использует другой формат.

Когда я сравниваю времена, они разные:

>>> now == dt
False

Как я могу преобразовать LMT в JST, чтобы now == dt было True? Мне нужно использовать datetime(2018, 9, 7, 16, 9, 24, 177751, timezone('Asia/Tokyo')) и в то же время я хочу JST.

1 Ответ

0 голосов
/ 07 сентября 2018

Как отмечено в ответе на связанный вопрос , Никогда не создавайте дату и время с информацией о часовом поясе с помощью datetime () .Вместо этого вы должны использовать localize для преобразования даты и времени в JST после их создания в UTC.

>>> import pytz
>>> from datetime import datetime
>>>
>>> now = datetime.now(pytz.utc)
>>> dt = datetime(now.year, now.month, now.day, now.hour, now.minute, now.second, now.microsecond, pytz.utc)
>>> jst = pytz.timezone('Asia/Tokyo')
>>> jst.normalize(now)
datetime.datetime(2018, 9, 7, 20, 21, 44, 653897, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)
>>> jst.normalize(dt)
datetime.datetime(2018, 9, 7, 20, 21, 44, 653897, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)
>>> now == dt
True
...