how to get tz_info object corresponding to current timezone?
在
环境变量不能指望,因为它们不是跨平台的
1 2 3 4 5 6 7 8 9 10 | >>> 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 2 3 4 5 6 7 8 9 10 11 12 13 | 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偏移量变化。
以下代码段返回不同时区的时间,与服务器上配置的时区无关。
1 2 3 4 5 6 7 8 9 10 11 | # 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)) |
也许试试:
我自己没有用它,但是dateutil.tz.tzlocal()应该可以解决问题。
http://labix.org/python-dateutil#head-50221b5226c3ccb97daa06ea7d9abf0533ec0310
我对自己问了同样的问题,我在[1]中找到了答案:
看一下8.1.7节:格式"%z"(小写,Z大写也返回时区,但不是4位格式,但是以时区缩写的形式,如[3]中所示) strftime返回"+/- 4DIGIT"形式,这是电子邮件标题中的标准(参见RFC 2822的3.3节,参见[2],它废弃了指定电子邮件标题时区的其他方法)。
因此,如果您想要这种格式的时区,请使用:
1 | 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,仅供参考。