Я хочу получить часовой пояс по умолчанию (PST) моей системы с Python. Какой лучший способ сделать это? Я хотел бы избежать разветвления другого процесса.
Получить информацию о часовом поясе системы в Python?
Ответ 1
Проверьте модуль времени Python.
from time import gmtime, strftime
print(strftime("%z", gmtime()))
Стандартное тихоокеанское время
Ответ 2
Это должно работать:
import time
time.tzname
time.tzname
возвращает кортеж из двух строк: первая - это имя локального часового пояса без DST, вторая - имя локального часового пояса DST.
Пример возврата: ('MST', 'MDT')
Ответ 3
Дает смещение UTC, как в ответе ThomasH, но учитывает летнее время.
>>> import time
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone
>>> offset / 60 / 60 * -1
-9
Значение time.timezone
или time.altzone
находится в секундах к западу от UTC (с областями к востоку от UTC, получающим отрицательное значение). Это противоположно тому, как нам это на самом деле нравится, следовательно, * -1.
time.localtime().tm_isdst
будет равен нулю, если летнее сбережение в настоящее время не действует (хотя это может быть неверным, если область недавно изменила свой закон о летнем свете).
EDIT: marr75 является правильным, я отредактировал ответ соответственно.
Ответ 4
Фрагменты кода для вычисления смещения неверны, см. http://bugs.python.org/issue7229.
Правильный способ справиться с этим:
def local_time_offset(t=None):
"""Return offset of local zone from GMT, either at present or at time t."""
# python2.3 localtime() can't take None
if t is None:
t = time.time()
if time.localtime(t).tm_isdst and time.daylight:
return -time.altzone
else:
return -time.timezone
Это, по всей вероятности, не точный вопрос, который задал ОП, но на странице есть два неправильных фрагмента, а ошибки времени - отскакивание и исправление.
Ответ 5
Если вы предпочитаете смещения UTC по строкам:
time.timezone / -(60*60)
Ответ 6
Я нашел это работать хорошо:
import datetime
tz_string = datetime.datetime.now(datetime.timezone.utc).astimezone().tzname()
Для меня это было в состоянии различить летнее время и нет.