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

问题描述 投票:1回答:2

我在python中使用datetime对象。我有一个需要花费时间的功能,并发现当时和现在之间的不同。

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

当我在将past_time传递给此函数之前初始化它时,我将其初始化为datetime naive。现在也是一个日期时间天真的对象。但是,当我尝试调用此函数时,我得到错误:无法减去offset-naive和offset-aware datetimes。如果它们在理论上都是日期时间的天真物体,那怎么会这样呢?

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

python datetime timezone
2个回答
6
投票

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

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

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

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


0
投票

使用 :

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

在diff = now - past_time之前。

所以现在和past_time都有相同的tzinfo。

只有现在和过去时间打算在同一时区。

© www.soinside.com 2019 - 2024. All rights reserved.