主要观点:软件中的日期和时间处理是痛点,Python 过去有不明智选择,此文旨在反映其中陷阱并修正示例。
关键信息:
- 时区无知的日期时间对象是最大祸首,应避免使用。
- 时区感知的日期时间对象与时区标识符配对,可用于相对计算。
- 纪元时间戳是相对比较时间的较好方式,但需满足特定条件。
- 从时间戳转换为
datetime
对象时要注意本地时区设置。
重要细节: - Python 允许存在时区无知的日期时间对象,处理日期时应避免。
- 时区感知对象可通过包含时区标识符来消除歧义并进行计算。
- 纪元时间戳从 1970 年 1 月 1 日开始,通常在 2038 年前有效且忽略闰秒。
time.time()
获取的时间戳是相对 UTC 的整数,datetime.datetime.now()
返回本地时区的时区无知对象。- 若本地系统时区不是 UTC,
datetime.datetime.now()
和datetime.datetime.utcnow()
结果不同。 - 避免使用
datetime.datetime.utcnow()
,推荐使用datetime.datetime.now(datetime.timezone.utc)
。 - 若闰秒重要,可参考 IANA 时区数据库的转换表,但通常意味着出错。
time.time()
返回值是浮点数,讨论中为简化用整数,且不保证单调递增。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。