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

我正在尝试从datetime.today()的值中减去一个日期值来计算多久以前。 但它抱怨说:

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

datetime.today()似乎不是“时区意识”,而我的其他日期值是。 如何获得datetime.today()的值是可datetime.today()时区的? 现在它给了我当地时间的时间,恰好是PST,即UTC-8小时。 最坏的情况下,有没有办法我可以手动输入datetime.today()返回的datetime对象的时区值并将其设置为UTC-8? 当然,理想的解决方案是让它自动知道时区。


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

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

使用本地时区可能非常棘手(请参阅下面的“进一步阅读”链接),因此您可能更希望在整个应用程序中使用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:

  • pytz文档
  • 每个开发人员都应该了解的关于时间 - 许多现实生活用例的开发暗示
  • 时间和时区的问题 - Computerphile - 关于使用时区(视频)的复杂性的有趣,令人大开眼界的解释

  • 在特定时区获取当前时间:

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

    在Python 3中,标准库使得它更容易:

    >>> 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中使用,请参阅JF Sebastien的答案。

    链接地址: http://www.djcxy.com/p/67405.html

    上一篇: Python: How to get a value of datetime.today() that is "timezone aware"?

    下一篇: LocationManager calling onLocationChanged too often?