如何在Python中获得“时区感知”的datetime.today()值?

2024-03-29 01:47:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从datetime.today()的值中减去一个日期值来计算某物存在的时间。但它抱怨道:

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

datetime.today()似乎不是“时区感知”,而我的另一个日期值是。如何获取时区感知的datetime.today()值?

现在,它给我的时间是当地时间,正好是太平洋标准时间,也就是UTC-8小时。最坏的情况是,有没有办法将时区值手动输入到由datetime.today()返回的datetime对象中并将其设置为UTC-8?

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


Tags: and标准todaydatetime时间canoffsetutc
3条回答

在Python 3中,标准库使将UTC指定为时区更加容易:

>>> import datetime
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2016, 8, 26, 14, 34, 34, 74823, tzinfo=datetime.timezone.utc)

如果您想要一个只使用标准库并且在Python 2和Python 3中都能工作的解决方案,请参见J. F. Sebastien's answer

在标准库中,没有跨平台的方法可以在不创建自己的时区类的情况下创建感知时区。

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

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

您可以得到当前日期/时间,如下所示:

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

记住datetime.today()datetime.now()返回本地时间,而不是UTC时间,因此对它们应用.replace(tzinfo=pytz.utc)是不正确的。

另一个好办法是:

datetime.now(pytz.utc)

有点短,也一样。


在许多情况下,进一步阅读/观察为什么选择UTC:

获取特定时区中的当前时间:

import datetime
import pytz
my_date = datetime.datetime.now(pytz.timezone('US/Pacific'))

相关问题 更多 >