python - 如何在 Python 中获取 "timezone aware"的 datetime.today() 值?

标签 python datetime date timezone

我试图从 datetime.datetime.today() 的值中减去一个日期值,以计算某件事是多久以前的。但它提示:

TypeError: can't subtract offset-naive and offset-aware datetimes

datetime.datetime.today() 的返回值似乎不是“时区感知”,而我的其他日期值是。如何从 datetime.datetime.today() 获取时区感知的返回值?

理想的解决方案是让它自动知道时区。

现在,它给我的是本地时间,恰好是 PST,即 UTC - 8 小时。最坏的情况,有没有办法可以手动将时区值输入到 datetime.datetime.today() 返回的 datetime 对象并将其设置为 UTC-8?

最佳答案

在标准库中,没有创建自己的时区类的跨平台方法来创建感知时区。 (编辑: Python 3.9 在提供此功能的标准库中引入了zoneinfo。)

在 Windows 上,有 win32timezone.utcnow(),但这是 pywin32 的一部分。我宁愿建议使用 pytz library ,它有一个不断更新的大多数时区数据库。

使用本地时区可能非常棘手(请参阅下面的“进一步阅读”链接),因此您可能更希望在整个应用程序中使用 UTC,尤其是对于算术运算,例如计算两个时间点之间的差异。

您可以像这样获取当前日期/时间:

import pytz
from datetime import datetime
datetime.utcnow().replace(tzinfo=pytz.utc)

请注意 datetime.today()datetime.now() 返回 local 时间,而不是 UTC 时间,因此应用 .replace(tzinfo=pytz.utc) 对他们来说是不正确的。

另一个不错的方法是:

datetime.now(pytz.utc)

这有点短,但作用相同。


进一步阅读/观看为什么在许多情况下更喜欢 UTC:

关于python - 如何在 Python 中获取 "timezone aware"的 datetime.today() 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530069/

相关文章:

python - 如何通过按住按钮来移动 pygame 中的对象?

javascript - 以字符串格式提供 moment 时出现 ISO 格式弃用警告

java - 在 Java 中我怎么说 5 秒后?

python - Kubernetes Python Client Watch 停止返回结果,不会失败

python - Tkinter 按钮命令disabledbackground 是否已在python 3 中删除?

python - 性能 : (Compare string) vs (convert to int)

ruby-on-rails - Rails,一年中的某一天

python - pandas 特定月份的平均值

php - PHP返回的JSON对象是否可以包含日期对象

R 如何将应用函数用于时间序列对象并将日期附加到特定列?