неожиданные результаты, преобразующие таймеры в python

Я пытаюсь понять, почему я получаю эти результаты при преобразовании часовых поясов в UTC:

In [74]: d1 = datetime(2007, 12, 5, 6, 30,tzinfo=pytz.timezone('US/Pacific')) In [75]: d1 Out[75]: datetime.datetime(2007, 12, 5, 6, 30, tzinfo=<DstTzInfo 'US/Pacific' LMT-1 day, **16:07:00 STD**>) In [76]: d1.astimezone(pytz.utc) Out[76]: datetime.datetime(2007, 12, 5, 14, 23, tzinfo=<UTC>) 

Почему 6:30 утра стало 14:23?

С другой стороны, если я использую следующий подход, я получаю ожидаемый результат:

 In [90]: d2 = datetime(2007, 12, 5, 6, 30) In [91]: uspac = pytz.timezone('US/Pacific') In [92]: d2_aware = uspac.localize(d2) In [94]: d2_aware.astimezone(pytz.utc) Out[94]: datetime.datetime(2007, 12, 5, 14, 30, tzinfo=<UTC>) 

2 Solutions collect form web for “неожиданные результаты, преобразующие таймеры в python”

Из частичной документации: http://pytz.sourceforge.net/#localized-times-and-date-arithmetic

К сожалению, использование аргумента tzinfo стандартных конструкторов datetime «не работает» с pytz для многих часовых поясов. […] Это безопасно для часовых поясов без перехода на летнее время, хотя, например, в формате UTC. […] Предпочтительный способ борьбы со временем – всегда работать в UTC, конвертируя его в локальное время только при генерации вывода для чтения людьми.

То, что у меня есть, – это просто обходное решение, простое правило: никогда не создавайте дату и время с информацией о часовом поясе, используя datetime () .

Этот образец даст вам подсказку. Как вы видите, вы могли бы избежать неожиданной разницы, раз и только вы делаете «наивное» datetime (это, datetime без информации о часовом поясе), а затем локализуете его (он не применяется при создании даты и времени в UTC, хотя):

 import pytz from datetime import datetime # make Jan 1 on PDT -> UTC pdt = pytz.timezone("America/Los_Angeles") pdtnow1 = datetime(2014,1,1, tzinfo=pdt) pdtnow2 = pdt.localize(datetime(2014,1,1)) pytz.utc.normalize(pdtnow1) # > datetime.datetime(2014, 1, 1, 7, 53, tzinfo=<UTC>) pytz.utc.normalize(pdtnow2) # > datetime.datetime(2014, 1, 1, 8, 0, tzinfo=<UTC>) # make Jan 1 on UTC -> PDT utcnow1 = datetime(2014,1,1, tzinfo=pytz.utc) utcnow2 = pytz.utc.localize(datetime(2014,1,1)) pdt.normalize(utcnow1) # > datetime.datetime(2013, 12, 31, 16, 0, # > tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>) pdt.normalize(utcnow2) # > datetime.datetime(2013, 12, 31, 16, 0, # > tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>) 
  • Python: странное поведение с часовыми поясами pytz
  • Как проверить, локализован ли объект datetime с помощью pytz?
  • pytz.timezone показывает странные результаты для Азии / Калькутты?
  • Преобразование даты и времени python в timestamp и обратно в UTC по-прежнему использует локальный часовой пояс
  • Python - от локального времени DST до UTC
  • pytz: Почему нормализация необходима при переходе между часовыми поясами?
  • Как добавить часовой пояс в наивный экземпляр datetime в python
  • Проблема с часовым поясом с pytz
  •  
    Interesting Posts for Van-Lav

    Отправка данных из одного протокола в другой протокол в Twisted?

    ConfigObj / ConfigParser против использования файла настроек YAML для Python

    Redis Pubsub и Message Queuing

    Правильное использование геттера / сеттера для значений словаря

    Как экспортировать и сохранять связанные Jupyter ноутбуки?

    Использование panda для сравнения значений столбцов и создания столбца на основе значений в сравниваемых столбцах?

    Запуск приложения pyqt дважды из одного приглашения в spyder

    Дикт и список диктов: преобразование и когда использовать

    Django: как создать модель динамически только для тестирования

    Как сделать скверную программу C ++ с помощью Python и / или Lua?

    Pandas: получать значения индекса и столбцов каждого значения

    Переименовать файлы .txt в первую строку в файле?

    Как написать два листа в одной книге одновременно с помощью openpyxl

    Python – создать словарь из списка словарей

    В Python, как вы определяете, работает ли ядро ​​в 32-битном или 64-битном режиме?

    Python - лучший язык программирования в мире.