пыц:Зачем нужна нормализация при преобразовании между часовыми поясами?

StackOverflow https://stackoverflow.com/questions/1422880

  •  07-07-2019
  •  | 
  •  

Вопрос

Я читаю не столь полное документация pytz и я застрял на том, чтобы понять одну часть этого.

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

>>> 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.

Спасибо

Это было полезно?

Решение

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

Кроме того, если вы выполняете вычисление даты по местному времени, выходящему за границы DST, результаты могут быть в неправильном часовом поясе (т.е.вычтите 1 минуту из 2002-10-27 1:00 EST и получите 2002-10-27 0:59 EST вместо правильного 2002-10-27 1:59 EDT).Для исправления этого предусмотрен метод normalize().К сожалению, эти проблемы не могут быть решены без изменения реализации Python datetime.

Другие советы

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

Кроме того, если вы выполняете вычисление даты по местному времени, выходящему за границы DST, результаты могут быть в неправильном часовом поясе (т.е.вычтите 1 минуту из 2002-10-27 1:00 EST и получите 2002-10-27 0:59 EST вместо правильного 2002-10-27 1:59 EDT).Для исправления этого предусмотрен метод normalize().

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top