如何获取与当前时区对应的tz_info对象?

时间:2009-11-05 15:08:46

标签: python datetime time timezone pytz

python(或pytz)中是否存在跨平台功能,该功能会返回与当前在计算机上设置的时区对应的tzinfo对象?

环境变量不能指望,因为它们不是跨平台的

8 个答案:

答案 0 :(得分:11)

>>> 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'
>>> 

答案 1 :(得分:8)

返回pytz时区的

tzlocal module适用于* 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偏移变化。

答案 2 :(得分:4)

以下代码段返回不同时区的时间,与服务器上配置的时区无关。

# 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))

答案 3 :(得分:2)

time.timezone返回当前时区偏移量。如果你需要更复杂的结构,还有一个datetime.tzinfo

答案 4 :(得分:1)

我自己没有使用它,但是dateutil.tz.tzlocal()应该可以解决这个问题。

http://labix.org/python-dateutil#head-50221b5226c3ccb97daa06ea7d9abf0533ec0310

答案 5 :(得分:1)

也许试试:

import time

print time.tzname #or time.tzname[time.daylight]

答案 6 :(得分:0)

Python 3.7:

import datetime

datetime.datetime.now().astimezone().tzinfo

答案 7 :(得分:-1)

我对自己问了同样的问题,我在[1]中找到了答案:

请参阅第8.1.7节:格式“%z”(小写,Z大写也返回时区,但不是4位格式,但是以时区缩写的形式,如[ strftime的3])返回电子邮件标题中标准的“+/- 4DIGIT”形式(参见RFC 2822的3.3节,参见[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,仅供参考。