Получить информацию о часовом поясе системы в Python? - PullRequest
55 голосов
/ 10 июля 2009

Я хочу получить часовой пояс по умолчанию (PST) моей системы от Python. Какой лучший способ сделать это? Я хотел бы избежать разветвления другого процесса.

Ответы [ 6 ]

86 голосов
/ 10 июля 2009

Это должно работать:

import time
time.tzname

time.tzname возвращает кортеж из двух строк: первая - это имя локального часового пояса, не относящегося к летнему времени, а вторая - имя локального часового пояса по летнему времени.

Пример возврата: ('MST', 'MDT')

22 голосов
/ 01 июня 2012

Дает смещение 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 будет равно нулю, если переход на летнее время в настоящее время не действует (хотя это может быть неправильно, если район недавно изменил закон перехода на летнее время).

РЕДАКТИРОВАТЬ: marr75 правильно, я соответственно отредактировал ответ.

14 голосов
/ 10 июля 2009

Проверьте Python Время Модуль.

from time import gmtime, strftime
print(strftime("%z", gmtime()))

тихоокеанское стандартное время

10 голосов
/ 16 ноября 2012

Фрагменты кода для вычисления смещения неверны, см. 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

По всей вероятности, это не точный вопрос, который задал ОП, но на странице есть два неверных фрагмента, и ошибки времени отстают, чтобы выследить и исправить.

6 голосов
/ 12 июля 2018

Я нашел, что это работает хорошо:

import datetime
tz_string = datetime.datetime.now(datetime.timezone.utc).astimezone().tzname()

Для меня это было в состоянии различить летнее и нет.

https://stackoverflow.com/a/39079819/4549682

3 голосов
/ 11 июля 2009

Если вы предпочитаете смещения UTC над строками:

time.timezone / -(60*60)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...