【问题标题】:Specifying timezone aware times in python [duplicate]在python中指定时区感知时间[重复]
【发布时间】:2015-02-21 04:55:37
【问题描述】:

我正在尝试使用 datetime.time 对象在 python 中指定一组时区感知时间。但是,pytz 库似乎不太支持这一点:使用 US/Pacific 返回一个奇数时区,与 UTC 相差 53 分钟

>>> datetime.time(10, 52, tzinfo=pytz.timezone("US/Pacific"))
datetime.time(10, 52, tzinfo=<DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)

执行此操作的支持方法似乎是对 datetime.datetime 对象使用 datetime.localize,但 datetime.time 对象不支持此方法

>>> pytz.timezone("US/Pacific").localize(datetime.datetime(2011, 6, 27, 2, 0, 0))
datetime.datetime(2011, 6, 27, 2, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)
>>> pytz.timezone("US/Pacific").localize(datetime.time(10, 45))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/bar/.virtualenvs/foo/lib/python2.7/site-packages/pytz/tzinfo.py", line 309, in localize
    loc_dt = dt + delta
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

【问题讨论】:

  • 如果您没有与时间关联的日期,那么无论您使用 哪个 类,您都会遇到夏令时问题。
  • 正是这在另一个问题中也没有答案。

标签: python datetime timezone


【解决方案1】:

问题在于time 上的时区毫无意义,没有相关日期;假设您在美国/太平洋时区有一个日期,这不是一个恒定的偏移量;实际调整取决于time 应该发生的确切日期

正如您所注意到的,如果您按原样使用US/Pacific,而不使用localize,则datetime 对象默认情况下指的是历史时区,即使完全偏移也不会与当前UTC 偏移小时,但有些分数;那是因为tzinfo 实例不知道他们正在调整的datetimetime 也会出现同样的问题。

最好的做法是不为time 使用时区;当需要计算时区时,您可以将其与本地化的datetime 对象添加合并。

【讨论】:

  • 好吧,事实并非如此。 Python 确实支持tzinfo 用于time 对象,也有timetz() 用于datetime 对象,因此您可以拥有适当的偏移感知time 对象。在我看来,只是 pytz 不能正确支持 tzinfotime 对象。
  • 有效:print(time(hour=14, minute=0, tzinfo=timezone(timedelta(hours=-4))) &lt; datetime.fromisoformat('2019-09-11T10:00:00-04:00').timetz()) 无效:print(time(hour=14, minute=0, tzinfo=pytz.timezone('US/Eastern')) &lt; datetime.fromisoformat('2019-09-11T10:00:00-04:00').timetz())
  • @DmitryMugtasimov 显然你忽略了我在回答中所说的一切。
  • 这是如何转换为可用于时间对象的时区:from datetime import timezone, timedelta, datetime; timezone(timedelta(seconds=datetime.now(tzinfo).utcoffset().total_seconds()))
猜你喜欢
  • 2019-01-02
  • 2015-08-21
  • 1970-01-01
  • 2013-07-18
  • 2011-07-24
  • 2012-04-17
  • 2012-06-30
  • 1970-01-01
  • 2011-10-27
相关资源
最近更新 更多