【问题标题】:Why isn't my code working to make datetime objects timezone-aware?为什么我的代码不能让 datetime 对象识别时区?
【发布时间】:2018-10-28 21:13:39
【问题描述】:

我有两个代表同一时刻的 python 日期时间对象:

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

【问题讨论】:

标签: python python-3.x datetime timezone


【解决方案1】:

这样做的正确方法似乎是:

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

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 2019-06-23
    • 2015-01-21
    • 2014-02-04
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2020-12-16
    • 2014-06-27
    相关资源
    最近更新 更多