如何添加时区成天真DateTime实例在Python [复制](How to add timezon

2019-07-17 12:11发布

这个问题已经在这里有一个答案:

  • 如何让一个不知情的日期时间时区意识到蟒蛇 9个回答

我有一个datetime它没有时区信息。 现在我得到了时区信息,并希望到时区添加到已有的DateTime实例,我该怎么办?

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

如何添加时区信息tz成日期时间a

Answer 1:

使用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)


Answer 2:

如果你知道你原来的日期时间是在时区“测量”您要添加到它,你可以(但可能不应该)使用replace ,而不是localize

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

我能想象的2倍时,这可能是有意义的(第二个发生在我身上):

  1. 你的服务器的区域设置为不正确的时区和您正试图纠正datetime通过使其意识到这种不正确时区的(大概后,它定位于“正确的”时区,值现在实例()匹配到其他时候,你是比较它(你的手表,也许)
  2. 你想“标签”一time实例( 不是 datetime与时区(tzinfo)属性),这样属性以后可以用来形成一个完整datetime实例。


文章来源: How to add timezone into a naive datetime instance in python [duplicate]