这个问题已经在这里有一个答案:
- 如何让一个不知情的日期时间时区意识到蟒蛇 9个回答
我有一个datetime
它没有时区信息。 现在我得到了时区信息,并希望到时区添加到已有的DateTime实例,我该怎么办?
d = datetime.datetime.now()
tz = pytz.timezone('Asia/Taipei')
如何添加时区信息tz
成日期时间a
这个问题已经在这里有一个答案:
我有一个datetime
它没有时区信息。 现在我得到了时区信息,并希望到时区添加到已有的DateTime实例,我该怎么办?
d = datetime.datetime.now()
tz = pytz.timezone('Asia/Taipei')
如何添加时区信息tz
成日期时间a
使用tz.localize(d)
本地化的实例。 从文档 :
第一种方法是使用由pytz库提供的局部化()方法。 这是用来定位一个幼稚日期时间(日期时间,没有时区信息):
>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0)) >>> print(loc_dt.strftime(fmt)) 2002-10-27 06:00:00 EST-0500
如果你不使用tz.localize()
但使用datetime.replace()
有机会, 历史的偏移来代替; tz.localize()
将选择权效应所抵消对于给定的日期。 美国东部时区夏令时开始和结束日期随时间而变化,例如。
当你尝试,因为它横跨从夏天到冬天的时候,反之亦然过渡时期本地化日期时间值是模糊的,时区将进行协商,看是否产生DateTime对象应该有.dst()
返回真或假。 您可以覆盖与时区的默认is_dst
关键字参数.localize()
dt = tz.localize(naive, is_dst=True)
或甚至通过设置完全关闭选择is_dst=None
。 在这种情况下,或在极少数情况下, 没有默认设置时区,一个不明确的日期时间值将导致AmbiguousTimeError
异常被提出。 该is_dst
标志仅征询是含糊不清,否则将被忽略日期时间值。
回去的其他方式,把一个时区知晓对象回到天真的对象,请使用.replace(tzinfo=None)
:
naivedt = awaredt.replace(tzinfo=None)
如果你知道你原来的日期时间是在时区“测量”您要添加到它,你可以(但可能不应该)使用replace
,而不是localize
。
# d = datetime.datetime.now()
# tz = pytz.timezone('Asia/Taipei')
d = d.replace(tzinfo=tz)
我能想象的2倍时,这可能是有意义的(第二个发生在我身上):
datetime
通过使其意识到这种不正确时区的(大概后,它定位于“正确的”时区,值现在实例()匹配到其他时候,你是比较它(你的手表,也许) time
实例( 不是 datetime
与时区(tzinfo)属性),这样属性以后可以用来形成一个完整datetime
实例。