pytz: Зачем нужна нормализация при преобразовании часовых поясов? - PullRequest
22 голосов
/ 14 сентября 2009

Я читаю не очень полную PyTZ документацию , и я застрял в понимании одной ее части.

Преобразование часовых поясов также требует особого внимания. Для этого также необходимо использовать метод нормализации, чтобы убедиться в правильности преобразования.

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 EST+1100'
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'

Я попробовал этот самый пример без , используя normalize, и получилось точно так же. По моему мнению, этот пример не объясняет , почему мы должны использовать normalize при преобразовании между datetime объектами в разных часовых поясах.

Может, кто-нибудь даст мне пример (такой, как приведенный выше), где результат отличается, если не использовать normalize.

Спасибо

Ответы [ 2 ]

9 голосов
/ 14 сентября 2009

Из документации по pytz:

Кроме того, если вы выполняете арифметику дат по местному времени, которое пересекает границы летнего времени, результаты могут быть в неправильном часовом поясе (т.е. вычтите 1 минуту из 2002-10-27 в 1:00 EST, и вы получите 2002-10- 27 0:59 EST вместо правильного 2002-10-27 1:59 ПО ВОСТОЧНОМУ ВРЕМЕНИ). Метод normalize () предоставляется для исправления этого. К сожалению, эти проблемы не могут быть решены без изменения реализации Python datetime.

6 голосов
/ 14 сентября 2009

В документах говорится, что нормализация используется в качестве обходного пути для решения проблем летнего времени:

Кроме того, если вы выполняете арифметику дат по местному времени, которое пересекает границы летнего времени, результаты могут быть в неправильном часовом поясе (т.е. вычтите 1 минуту из 2002-10-27 в 1:00 EST, и вы получите 2002-10- 27 0:59 EST вместо правильного 2002-10-27 1:59 ПО ВОСТОЧНОМУ ВРЕМЕНИ). Для исправления этой проблемы предоставляется метод normalize ().

Так что он используется для исправления некоторых крайних случаев, связанных с DST. Если вы не используете часовые пояса DST (например, UTC), тогда не обязательно использовать normalize.

Если вы не используете его, при определенных обстоятельствах ваше обращение может быть на один час прекращено.

...