Python2 против Python3: другой результат при конвертации в datetime из отметки времени - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь перенести некоторый код с python2 на python3. У меня возникают проблемы при преобразовании кода с использованием манипуляций с датой и временем.

python2.7

Python 2.7.13 (default, Apr 19 2017, 02:44:33) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import os
>>> os.environ['TZ'] = 'UTC'
>>> datetime.datetime.fromtimestamp(1461085831)
datetime.datetime(2016, 4, 19, 17, 10, 31)

Python3.6

Python 3.6.1 (default, Apr 19 2017, 21:58:41) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import os
>>> os.environ['TZ'] = 'UTC'
>>> datetime.datetime.fromtimestamp(1461085831)
datetime.datetime(2016, 4, 19, 22, 40, 31)

Результат для python2 = (2016, 4, 19, 17, 10, 31), тогда как для python3 = (2016, 4, 19, 22, 40, 31). Почему это различие и как мне преодолеть это?

1 Ответ

0 голосов
/ 01 ноября 2018

Это немного сложно. Насколько мне известно, это происходит только с Python 3.6. Короче говоря, вам нужно позвонить time.tzset после установки TZ среды. Я сталкивался с этим некоторое время назад (точно не помню), , и у меня нет тестового питона до 3.6, поэтому, пожалуйста, потерпите меня . Я только что проверил эту проблему на python3.5 моего коллеги, она работает как положено (без установки time.tzset())

Документы time.tzset говорят:

Сброс правил преобразования времени, используемых процедурами библиотеки. Переменная окружения TZ определяет, как это делается. Также будут установлены переменные tzname (из переменной окружения TZ), часовой пояс (не в DST секунды к западу от UTC), altzone (DST секунды к западу от UTC) и дневной свет (0, если в этом часовом поясе нет правил перехода на летнее время). или ненулевой, если есть время, прошлое, настоящее или будущее, когда применяется летнее время).

Просто поставьте time.tzset():

See the results

РЕДАКТИРОВАНИЕ: Я только что провел некоторый поиск, это поведение (по ошибке) было сообщено как ошибка: datetime в Python 3.6+ больше не учитывает переменную среды 'TZ'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...