我有一个datetime
,它没有时区信息。我现在正在获取时区信息,并希望将时区添加到已存在的日期时间实例中,我该怎么办?如何在python中添加时区到天真的日期时间实例
d = datetime.datetime.now()
tz = pytz.timezone('Asia/Taipei')
如何添加时区信息tz
到日期时间a
我有一个datetime
,它没有时区信息。我现在正在获取时区信息,并希望将时区添加到已存在的日期时间实例中,我该怎么办?如何在python中添加时区到天真的日期时间实例
d = datetime.datetime.now()
tz = pytz.timezone('Asia/Taipei')
如何添加时区信息tz
到日期时间a
使用tz.localize(d)
本地化的实例。从documentation:
第一个是使用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
如果不使用tz.localize()
,但使用datetime.replace()
,机会是一个历史偏移来代替; tz.localize()
将选择给定日期的右偏移。例如,美国东部时区DST的开始和结束日期随时间而改变。
当你尝试,因为它横跨从夏天到冬天的时候,反之亦然过渡时期本地化日期时间值是模糊的,时区将进行协商,看是否产生DateTime对象应该有.dst()
返回TRUE或FALSE 。您可以覆盖与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
通过使它知道这个不正确的时区(大概是后来将它定位到“正确的”时区,以使now()的值匹配到其他时间(可能是您的手表)datetime
)与时区(tzinfo)属性相关联,以便稍后可以使用该属性来形成完整的datetime
实例。
完美解决,谢谢。 – waitingkuo
有没有方便的方法从'datetime'获得天真的'datetime',它有tzinfo? – waitingkuo
@waitingkuo:在'datetime'对象上调用'.replace(tzinfo = None)'。返回值是一个天真的'datetime'实例。 –