我试图从 datetime.datetime.today()
的值中减去一个日期值来计算某事发生在多长时间前。但它抱怨:
TypeError: can't subtract offset-naive and offset-aware datetimes
datetime.datetime.today()
的返回值似乎不是“时区感知”,而我的其他日期值是。如何从 datetime.datetime.today()
获取时区感知的返回值?
理想的解决方案是让它自动知道时区。
现在,它给我的时间是当地时间,恰好是太平洋标准时间,即 UTC - 8 小时。最坏的情况是,有没有一种方法可以手动将时区值输入 datetime
由 datetime.datetime.today()
返回的对象并将其设置为 UTC-8?
原文由 mindthief 发布,翻译遵循 CC BY-SA 4.0 许可协议
在标准库中,如果不创建自己的时区类,就没有跨平台的方法来创建感知时区。 ( 编辑: Python 3.9 在提供此功能的标准库中引入了
zoneinfo
。)在 Windows 上,有
win32timezone.utcnow()
,但那是 pywin32 的一部分。我宁愿建议使用 pytz library ,它有一个不断更新的大多数时区数据库。使用本地时区可能非常棘手(请参阅下面的“进一步阅读”链接),因此您可能更愿意在整个应用程序中使用 UTC,尤其是对于算术运算,例如计算两个时间点之间的差异。
您可以像这样获取当前日期/时间:
请注意
datetime.today()
和datetime.now()
返回 本地 时间,而不是 UTC 时间,因此应用.replace(tzinfo=pytz.utc)
是不正确的。另一个很好的方法是:
这是有点短,但做同样的事情。
进一步阅读/观看为什么在许多情况下更喜欢 UTC: