This question already has answers here:
How to add timezone into a naive datetime instance in python [duplicate]
(2个答案)
四年前关闭。
我今天遇到一个有趣的情况。有人能解释为什么ts1和ts2的偏移量不同吗?ts1是一个日期时间对象,可以立即识别时区。ts2是一个datetime对象,它从时区naive开始并替换其tzinfo。然而,它们最终会有不同的偏移量。
你最后用的是LMT而不是EDT。
不幸的是使用了标准日期时间的tzinfo参数
对于许多时区,构造函数“”不适用于pytz。
但对于没有夏令时转换的时区来说是安全的,
例如UTC:
我不太清楚为什么第一个可以工作;也许是因为当对象最初是用
编辑:
啊,Pythondocumentation注意到,将
这意味着您正在从UTC转换,这对于
(2个答案)
四年前关闭。
我今天遇到一个有趣的情况。有人能解释为什么ts1和ts2的偏移量不同吗?ts1是一个日期时间对象,可以立即识别时区。ts2是一个datetime对象,它从时区naive开始并替换其tzinfo。然而,它们最终会有不同的偏移量。
>>> from pytz import timezone
>>> EST = timezone('America/New_York')
>>> ts1 = datetime.datetime.now(tz=EST)
>>> ts2 = datetime.datetime.now()
>>> ts2 = ts2.replace(tzinfo=EST)
>>> print ts1
2014-05-16 11:25:16.749748-04:00
>>> print ts2
2014-05-16 11:25:19.581710-05:00
最佳答案
当您调用ts2.replace(tzinfo=EST)
时,得到的tzinfo
对象与用ts1
得到的对象不匹配:
>>> ts1
datetime.datetime(2014, 5, 16, 11, 51, 7, 916090, tzinfo=<DstTzInfo 'America/New_York' EDT-1 day, 20:00:00 DST>)
>>> ts2
datetime.datetime(2014, 5, 16, 11, 51, 30, 922692, tzinfo=<DstTzInfo 'America/New_York' LMT-1 day, 19:04:00 STD>)
你最后用的是LMT而不是EDT。
pytz
documentation实际上注意到,在标准datetime对象的pytz
参数中使用tzinfo
对于许多时区根本不起作用:不幸的是使用了标准日期时间的tzinfo参数
对于许多时区,构造函数“”不适用于pytz。
>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt) '2002-10-27 12:00:00 LMT+0020'
但对于没有夏令时转换的时区来说是安全的,
例如UTC:
>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt) '2002-10-27 12:00:00 UTC+0000'
我不太清楚为什么第一个可以工作;也许是因为当对象最初是用
tzinfo
对象构造的时候,它实际上不需要转换任何东西。编辑:
啊,Pythondocumentation注意到,将
datetime.datetime.now()
与tz
参数一起使用相当于:EST.fromutc(datetime.utcnow().replace(tzinfo=EST))
这意味着您正在从UTC转换,这对于
pytz
是安全的。所以这就是第一个成功的原因。08-25 01:07