python中的时区感知与时区天真

Posted

技术标签:

【中文标题】python中的时区感知与时区天真【英文标题】:timezone aware vs. timezone naive in python 【发布时间】:2012-04-17 11:01:00 【问题描述】:

我正在使用 python 中的日期时间对象。我有一个需要时间的函数,它会发现那个时间和现在之间的不同。

def function(past_time):
    now = datetime.now()
    diff = now - past_time

当我在将过去时间传递给这个函数之前初始化它时,我将它初始化为 datetime naive。现在也是一个日期时间天真的对象。但是,当我尝试调用此函数时,出现错误:无法减去偏移天真和偏移感知日期时间。如果它们在理论上都是 datetime naive 对象,为什么会出现这种情况?

任何帮助将不胜感激。谢谢!

【问题讨论】:

我想也许这个链接可以帮助? ***.com/questions/5259882/… "使用combine 构建一个可以减去的日期时间。" 请原谅,但与此同时,也许我们可能想考虑一下“天真”的定义:(一个人或行为)表现出缺乏经验、智慧或判断力。不是觉知的反面。因此,正确且合乎逻辑的术语是“不知道时区”。 datetime、pytz 等的开发人员请在以后更正此问题。 【参考方案1】:

datetime 不做任何跨时区计算,因为它是一个复杂且涉及的主题。

我建议将日期普遍转换为 UTC 并对其进行数学运算。

我最近在一个大型 python/Django 项目中完成了一个使用时区的项目,经过调查后,我将内部所有内容都转换为 UTC,并仅在向用户显示时转换。

您应该查看 pytz 以执行与 UTC 之间的转换,并在您的应用中存储您想要的时区的 Olson 代码 - 可能与每个用户相关联,或适合您的程序。

【讨论】:

好的,很好。这就说得通了。我是 django 的新手并使用 datetime 对象......你能告诉我有关进行这些转换的更多信息吗?谢谢! 为我使用的 pytz 添加了注释。 您是否能够使用这些信息来做您想做的事?如果是这样,您可以点击接受答案吗?谢谢!【参考方案2】:

使用:

    now = now.replace(tzinfo=past_time.tzinfo)

差异之前 = 现在 - 过去时间。

这样现在和过去的时间都具有相同的 tzinfo。

仅当 now 和 past_time 打算在同一时区时。

【讨论】:

以上是关于python中的时区感知与时区天真的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的日期可以感知时区吗?

Python 中的 datetime.fromtimestamp(os.path.getctime()) 是不是给了我一个时区感知值?

Python:如何在不知道 DST 是不是生效的情况下将时区感知时间戳转换为 UTC

python - 如何在没有dateutil的情况下将时区感知字符串转换为Python中的日期时间?

Python - 给定一个时区感知的日期时间对象,我如何获得一个时区朴素的 UTC 日期时间对象?

在时区支持处于活动状态时收到一个天真的日期时间