Не могу понять проблему TZ в Python

Я не понимаю, как Python рассчитывает время. Кажется, противоречит мне.

Время моего сервера:

admin@httstools ~ $ date
Fri Dec 21 17:00:51 PST 2018

В интерпретаторе Python я получаю ожидаемый результат (то есть 2018-12-21):

admin@httstools ~ $ python
Python 2.7.5 (default, Nov  6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> import datetime
>>> str(datetime.date.today())
'2018-12-21'
>>>

Но если я связываюсь с часовым поясом, все становится чокнутым:

>>> time.tzname[time.localtime().tm_isdst]
'PST'

PST является правильным часовым поясом. Но если я установлю свою среду на этот TZ, а затем снова выполню предыдущую команду, я получу другую дату, что, очевидно, не правильно:

>>> os.environ['TZ'] = time.tzname[time.localtime().tm_isdst]
>>> str(datetime.date.today())
'2018-12-22'
>>>

Ожидаемый результат будет 2018-12-21 с переменной TZ, установленной на "PST".

Как следствие, какую команду я могу запустить в python, которая всегда будет возвращать правильную дату / время в зависимости от моего местоположения.

1 ответ

Решение

Вот мое предположение относительно того, что происходит (у меня нет системы Linux для тестирования на данный момент).

Если вы изучите переменную среды TZ, то увидите, что она должна иметь синтаксис "Америка / Тихий океан", а не "PST" (PST - это просто сокращение, которое используется для печати). Когда недопустимое значение передается через переменную окружения TZ, я предполагаю, что Python возвращается к UTC в качестве нормального значения по умолчанию.

Время по Гринвичу для 17:00 по тихоокеанскому времени просто полночь следующего дня, поэтому вы получаете другую дату.

Другие вопросы по тегам