带时区的 Python datetime.now()

新手上路,请多包涵

我有一个浮动时区(例如 4.0)。

我想用给定的时区构造 datetime

我试过这个,

 datetime.now(timezone)

但它抛出

TypeError: tzinfo argument must be None or of a tzinfo subclass, not type 'float'

所以我想知道如何从浮动中制作 tzinfo

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

阅读 841
2 个回答

如果您使用的是 Python 3.2 或更新版本,则需要创建一个 datetime.timezone() 对象;它需要一个偏移量作为 datetime.timedelta()

 from datetime import datetime, timezone, timedelta

timezone_offset = -8.0  # Pacific Standard Time (UTC−08:00)
tzinfo = timezone(timedelta(hours=timezone_offset))
datetime.now(tzinfo)

对于较早的 Python 版本,最简单的方法是使用外部库为您定义时区对象。

dateutil 包括采用数字偏移量来创建时区对象的对象:

 from dateutil.tz import tzoffset

timezone_offset = -8.0  # Pacific Standard Time (UTC−08:00)
tzinfo = tzoffset(None, timezone_offset * 3600)  # offset in seconds
datetime.now(tzinfo)

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

我建议您使用 pytz ,因为它可能更简单。

根据描述:

该库允许使用 Python 2.4 或更高版本进行准确的跨平台时区计算。它还解决了夏令时结束时时间不明确的问题,您可以在 Python 库参考中阅读更多相关信息

>>> from datetime import datetime
>>> import pytz

>>> datetime.now(tz=pytz.UTC)
datetime.datetime(2021, 11, 12, 20, 59, 54, 579812, tzinfo=<UTC>)

>>> datetime.now(tz=pytz.timezone("Europe/Oslo"))
datetime.datetime(2021, 11, 12, 22, 0, 4, 911480, tzinfo=<DstTzInfo 'Europe/Oslo' CET+1:00:00 STD>)

>>> [tz for tz in pytz.common_timezones if tz.startswith("US")]
['US/Alaska',
 'US/Arizona',
 'US/Central',
 'US/Eastern',
 'US/Hawaii',
 'US/Mountain',
 'US/Pacific']


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

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