为啥 Python 的 datetime.time 有 tzinfo 参数?
Posted
技术标签:
【中文标题】为啥 Python 的 datetime.time 有 tzinfo 参数?【英文标题】:Why Python's datetime.time have tzinfo parameter?为什么 Python 的 datetime.time 有 tzinfo 参数? 【发布时间】:2016-05-24 20:27:10 【问题描述】:datetime
,Python 的内置模块,有一些类。
但是我不能很好地理解datetime.time
类的参数。
time
类有tzinfo
参数,默认为None
。
我想知道为什么time
类需要时区信息。
如果是datetime
类,它有.astimezone
方法,我们可以通过时区信息更改数据。但是time
类没有像.astimezone
这样的方法。
它只是为datetime.combine
类方法保留的吗?或者有什么关于时间和时区的重要故事?
【问题讨论】:
【参考方案1】:我想知道为什么时间类需要时区信息。
我觉得它很有用,例如如果我们正在处理无论日期如何都在同一时间发生的事件(例如计划的作业),并且需要在不同的时区显示、操作和比较。
如何获得可识别 TZ 的 datetime.time
对象
datetime.timetz()
返回具有相同时、分、秒的时间对象, 微秒和 tzinfo 属性。另见方法 time()。
对于我的示例用例,我将从我的 tz-aware datetime.datetime
对象中提取 datetime.time
对象,使用 datetime.datetime.timetz()
,它保留了 tzinfo
这将适合datetime.time
对象,而不是带有日期信息的datetime.datetime
对象。
但是时间类没有像 .astimezone 这样的方法。
您不能仅使用时间进行 TZ 转换
至于没有time.astimezone()
的原因,我想可能是因为没有日期,无法猜测DST转换和其他非固定UTC偏移的影响。
【讨论】:
【参考方案2】:time
类使用tzinfo
进行比较和操作。例如,美国/太平洋的上午 9:00 不等于美国/东部的上午 9:00。此外,如果您将感知时间与幼稚时间进行比较,python 可能会引发 TypeError,即将美国/太平洋地区的上午 9:00 与“上午 9:00”进行比较
来自the docs:
时间比较,当 a 在时间上先于 b 时,a 被认为小于 b。如果一个比较对象是幼稚的,而另一个是知道的,则在尝试进行顺序比较时会引发 TypeError。对于相等比较,朴素实例永远不会等于感知实例。
【讨论】:
以上是关于为啥 Python 的 datetime.time 有 tzinfo 参数?的主要内容,如果未能解决你的问题,请参考以下文章
Python - 计算两个 datetime.time 对象之间的差异