使用tz.localize(d)
本地化的实例。从文档中:
第一种是使用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的开始和结束日期随时间而变化。
当您尝试定位一个不明确的日期时间值时,因为它跨越了从夏季到冬季的过渡时期,反之亦然,因此将查询时区,以查看生成的日期时间对象是否应.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)