使用pytz在特定时区创建datetime
对象时,根据我是使用datetime.datetime()
还是datetime.datetime.now()
,我会得到不同的UTC偏移量。
now()
似乎为时区提供了正确的UTC偏移量,datetime()
给出了一个我无法识别的偏移量。
为什么他们不一样? datetime()
分配的偏移的重要性是什么?
这是我的代码:
import datetime
import pytz
la_paz = pytz.timezone('America/La_Paz')
a = datetime.datetime.now(la_paz)
print a, a.utcoffset()
# 2011-03-22 05:30:13-04:00 -1 day, 20:00:00
# -4 hours is the correct UTC offset for La Paz
b = datetime.datetime(2011, 03, 22, 5, 30, tzinfo=la_paz)
print b, b.utcoffset()
# 2011-03-22 05:30:00-04:33 -1 day, 19:27:00
# What is the significance of -4:33?
答案 0 :(得分:2)
默认情况下,datetime()
似乎会使用该区域的第一个记录时区,并且在许多情况下(如在拉巴斯),这是旧的,不再有效。
必须改为创建日期时间,然后进行本地化,如下所示:
b = la_paz.localize(datetime.datetime(2011, 03, 22, 5, 30))
print b, b.utcoffset()
now()
似乎会自动进行本地化。
答案 1 :(得分:2)
来自pytz文档:
此库仅支持两种构建本地化时间的方法。第一种是使用pytz库提供的localize()方法。这用于本地化一个天真的日期时间(没有时区信息的日期时间):
>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
>>> print loc_dt.strftime(fmt)
2002-10-27 06:00:00 EST-0500
构建本地化时间的第二种方法是使用标准的astimezone()方法转换现有的本地化时间:
>>> ams_dt = loc_dt.astimezone(amsterdam)
>>> ams_dt.strftime(fmt)
'2002-10-27 12:00:00 CET+0100'
或换句话说:
b = datetime.datetime(2011, 03, 22, 5, 30, tzinfo=la_paz)
pytz不支持