为什么 datetime.datetime.utcnow() 不包含时区信息?

新手上路,请多包涵
datetime.datetime.utcnow()

为什么这个 datetime 没有任何时区信息,因为它明确是一个 UTC datetime

我希望这将包含 tzinfo

原文由 Vitaly Babiy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 451
2 个回答

这意味着它是天真的时区,所以你不能将它与 datetime.astimezone 一起使用

你可以给它一个这样的时区

import pytz  # 3rd party: $ pip install pytz

u = datetime.utcnow()
u = u.replace(tzinfo=pytz.utc) #NOTE: it works only with a fixed utc offset

现在你可以改变时区

print(u.astimezone(pytz.timezone("America/New_York")))

要获取给定时区的当前时间,您可以将 tzinfo 直接传递给 datetime.now()

 #!/usr/bin/env python
from datetime import datetime
import pytz # $ pip install pytz

print(datetime.now(pytz.timezone("America/New_York")))

它适用于任何时区,包括那些遵守夏令时 (DST) 的时区,即它适用于在不同时间可能具有不同 utc 偏移量(非固定 utc 偏移量)的时区。不要使用 tz.localize(datetime.now()) 当当地时间不明确时,它可能会在夏令时结束转换期间失败。

原文由 John La Rooy 发布,翻译遵循 CC BY-SA 3.0 许可协议

请注意,对于 Python 3.2 及更高版本, datetime 模块包含 datetime.timezonedatetime.utcnow() 的文档说:

An aware current UTC datetime can be obtained by calling datetime.now ( timezone.utc ) .

So, datetime.utcnow() doesn’t set tzinfo to indicate that it is UTC, but datetime.now(datetime.timezone.utc) does return UTC time with tzinfo set.

所以你可以这样做:

 >>> import datetime
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2014, 7, 10, 2, 43, 55, 230107, tzinfo=datetime.timezone.utc)

原文由 Craig McQueen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题