Есть ли кросс-платформенная функция в python
(или pytz
), которая возвращает объект tzinfo
, соответствующий часовому поясу, установленному на компьютере?
переменные среды не могут учитываться, поскольку они не являются кросс-платформенными
Есть ли кросс-платформенная функция в python
(или pytz
), которая возвращает объект tzinfo
, соответствующий часовому поясу, установленному на компьютере?
переменные среды не могут учитываться, поскольку они не являются кросс-платформенными
>>> import datetime
>>> today = datetime.datetime.now()
>>> insummer = datetime.datetime(2009,8,15,10,0,0)
>>> from pytz import reference
>>> localtime = reference.LocalTimezone()
>>> localtime.tzname(today)
'PST'
>>> localtime.tzname(insummer)
'PDT'
>>>
tzlocal
module, который возвращает pytz
timezones работает на * nix и win32:
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal
# get local timezone
local_tz = get_localzone()
print local_tz.localize(datetime(2012, 1, 15))
# -> 2012-01-15 00:00:00+04:00 # current utc offset
print local_tz.localize(datetime(2000, 1, 15))
# -> 2000-01-15 00:00:00+03:00 # past utc offset (note: +03 instead of +04)
print local_tz.localize(datetime(2000, 6, 15))
# -> 2000-06-15 00:00:00+04:00 # changes to utc offset due to DST
Примечание: он учитывает изменения DST и не-DST utc offset.
Этот следующий фрагмент кода возвращает время в другом часовом поясе, независимо от часового пояса, настроенного на сервере.
# pip install pytz tzlocal
from tzlocal import get_localzone
from datetime import datetime
from pytz import timezone
local_tz = get_localzone()
local_datetime = datetime.now(local_tz)
zurich_tz = timezone('Europe/Zurich')
zurich_datetime = zurich_tz.normalize(local_datetime.astimezone(zurich_tz))
time.timezone
возвращает текущее смещение временной зоны. есть также datetime.tzinfo
, если вам нужна более сложная структура.
Я не использовал его сам, но dateutil.tz.tzlocal() должен сделать трюк.
http://labix.org/python-dateutil#head-50221b5226c3ccb97daa06ea7d9abf0533ec0310
Возможно, попробуйте:
import time
print time.tzname
#or time.tzname[time.daylight]
Я спрашивал об этом сам, и я нашел ответ в [1]:
Взгляните на раздел 8.1.7: формат "% z" (строчный регистр, верхний регистр Z возвращает также часовой пояс, но не в 4-значном формате, а в виде сокращений в часовом поясе, как в [ 3]) strftime возвращает форму "+/- 4DIGIT", которая является стандартной в заголовках электронной почты (см. Раздел 3.3 RFC 2822, см. [2], в котором устаревают другие способы указания часового пояса для заголовков электронной почты).
Итак, если вам нужен часовой пояс в этом формате, используйте:
time.strftime("%z")
[1] http://docs.python.org/2/library/datetime.html
[2] http://tools.ietf.org/html/rfc2822#section-3.3
[3] Аббревиатуры часовых поясов: http://en.wikipedia.org/wiki/List_of_time_zone_abbreviations, только для справки.