gpt4 book ai didi

python - 为什么我的代码无法使日期时间对象识别时区?

转载 作者:行者123 更新时间:2023-11-28 19:00:35 25 4
gpt4 key购买 nike

我有两个代表同一时刻的 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” vs “LMT-1 day, 16:26:00 STD”?他们为什么不同?我做错了什么?

最佳答案

执行此操作的正确方法似乎是:

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

关于python - 为什么我的代码无法使日期时间对象识别时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53036137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com