3

datetime使用 pytz 在特定时区创建对象时,我会根据我使用datetime.datetime()datetime.datetime.now().

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?
4

2 回答 2

2

似乎datetime()默认情况下将使用该地区的第一个记录时区,并且在许多情况下(如在拉巴斯),这是旧的并且不再有效。

日期时间必须先天真地创建,然后像这样本地化:

b = la_paz.localize(datetime.datetime(2011, 03, 22, 5, 30))
print b, b.utcoffset()

now()似乎会自动进行本地化。

于 2011-03-22T10:21:28.863 回答
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

于 2011-05-18T23:51:52.347 回答