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:
在特定时区获取当前时间:
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"?