我有两个表示相同时刻的python datetime对象:
a = datetime.datetime(2018, 10, 28, 13, 26, 30)
b = datetime.datetime(2018, 10, 28, 7, 26, 30)
两者都来自不同的来源。
我知道第一个在UTC中,第二个在"America/Edmonton"
(MDT)中。
最初都没有附加时区。
我需要为这些对象添加时区,并以a == b
为True
的方式进行比较。
我所做的是这样:
import datetime
from pytz import timezone
a = datetime.datetime(2018, 10, 28, 13, 26, 30)
b = datetime.datetime(2018, 10, 28, 7, 26, 30)
a = a.replace(tzinfo=timezone("UTC"))
b = b.replace(tzinfo=timezone("America/Edmonton"))
a = a.astimezone(timezone("America/Edmonton"))
b = b.astimezone(timezone("America/Edmonton"))
print(repr(a))
# Result: datetime.datetime(2018, 10, 28, 7, 26, 30, tzinfo=<DstTzInfo 'America/Edmonton' MDT-1 day, 18:00:00 DST>)
print(repr(b))
# Result: datetime.datetime(2018, 10, 28, 7, 26, 30, tzinfo=<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>)
a == b # Results in False for some reason
"MDT-1 day, 18:00:00 DST"
和"LMT-1 day, 16:26:00 STD"
是什么?他们为什么不同?我在做什么错了?
答案 0 :(得分:0)
执行此操作的正确方法似乎是:
import datetime
from pytz import timezone
a = datetime.datetime(2018, 10, 28, 13, 26, 30)
b = datetime.datetime(2018, 10, 28, 7, 26, 30)
a = timezone('UTC').localize(a)
b = timezone('America/Edmonton').localize(b)
a == b
如here所示。这确实导致a
等于b
。仍然不确定为什么听起来像pytz默认使用1893之前的系统。