如何在python中向朴素datetime实例中添加时区



我有一个没有时区信息的datetime。我现在正在获取时区信息,并希望将时区添加到现有的datetime实例中,我该怎么做?

d = datetime.datetime.now()
tz = pytz.timezone('Asia/Taipei')

如何将时区信息tz添加到datetime a

使用tz.localize(d)对实例进行本地化。来自文档:

第一种是使用pytz库提供的localalize()方法。这用于本地化朴素日期时间(没有时区信息的日期时间):

>>> 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。您可以使用.localize()is_dst关键字参数覆盖时区的默认值:

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次这可能是有意义的(第二次发生在我身上):

  1. 您的服务器区域设置为不正确的时区,您正试图通过使其意识到此不正确的时区来纠正datetime实例(并且可能稍后将其本地化为"正确"时区,因此now()的值与您将其与(您的手表)进行比较的其他时间相匹配)
  2. 你想用一个时区(tzinfo)属性"标记"一个time实例(NOT a datetime),以便以后可以使用该属性来形成一个完整的datetime实例。

相关内容

  • 没有找到相关文章

最新更新