为什么我的代码无法使日期时间对象意识到时区?

时间:2018-10-28 21:13:40

标签: python python-3.x datetime timezone

我有两个表示相同时刻的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 == bTrue的方式进行比较。

我所做的是这样:

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"是什么?他们为什么不同?我在做什么错了?

1 个答案:

答案 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之前的系统。