2009-07-10 2 views

ответ

10

Проверьте модуль Python Time.

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

Pacific Standard Time

+0

Мы смотрим на разные документы или это ''% Z''? – SilentGhost

+0

@ SilentGhost: «% z» и «% z» точно совпадают в Python. – ahawker

+11

есть, но ** верхний корпус ** 'Z' и ** нижний регистр **' z' нет. – SilentGhost

60

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

import time 
time.tzname 

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

+19

Чтобы воспользоваться этим, вы можете использовать 'time.tzname [time.daylight]', чтобы получить имя текущий часовой пояс, учитывающий переход на летнее время. –

+9

Опять же, «time.daylight» не указывает, что DST активен. Он просто указывает, соблюдается ли DST по часовому поясу. Вы ищете «time.localtime(). Tm_isdst». – marr75

+0

Просто для добавления пользователей Windows значения для часового пояса были определены в 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones \' – swdev

4

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

time.timezone/-(60*60) 
+4

Это неправильно рассчитает, когда (/ if) действует DST. – marr75

20

Дает 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 является правильным, я отредактировал ответ соответственно.

+1

Чтобы быть в безопасности, я считаю, что проверка смещения должна быть отменена (altzone, если dst = 1 еще часовой пояс). Если статус DST как-то неизвестен, 'tm_isdst' будет' -1', а текущий код по умолчанию будет 'altzone' в этом случае. Для регионов, которые не используют DST, это значение никогда не является правильным, поэтому «часовой пояс», вероятно, должен быть резервным. (Я не уверен, что '-1' на самом деле возможен вывод из' localtime', хотя) – nmclean

+1

[все решения на базе altzone, основанные на часовом поясе могут не работать в некоторых случаях) (http://bugs.python.org/issue1647654) – jfs

11

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

Это, по всей вероятности, не точный вопрос, что ОП спросил, но есть два неправильных сниппеты на странице и время ошибок сосут выследить и исправить.

+0

1. Если вы знаете 'tm_isdst'; вам не нужно проверять «дневной свет» 2. [все решения 'altzone',' timezone' могут не работать в некоторых случаях] (http://bugs.python.org/issue1647654) – jfs

Смежные вопросы