Не могу понять проблему TZ в Python - PullRequest
0 голосов
/ 22 декабря 2018

Я не понимаю, как 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 Ответ

0 голосов
/ 22 декабря 2018

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

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

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

...