首页 > 后端开发 > Python教程 > 如何准确地将 Python `datetime.date` 和 `datetime.datetime` 对象转换为 UTC 时间戳?

如何准确地将 Python `datetime.date` 和 `datetime.datetime` 对象转换为 UTC 时间戳?

Patricia Arquette
发布: 2024-12-19 22:53:10
原创
523 人浏览过

How to Accurately Convert Python `datetime.date` and `datetime.datetime` Objects to UTC Timestamps?

在 Python 中将 datetime.date 转换为 UTC 时间戳

在 Python 中处理日期时,需要将它们转换为 UTC 时间戳各种应用程序。但是,使用 datetime.datetime.utcfromtimestamp(time.mktime(d)) 等传统方法可能会导致不正确的结果。

将 UTC 日期转换为自纪元以来的秒数

对于以 UTC 表示的日期 d,将其转换为自纪元以来的秒数的正确公式是:

timestamp1 = calendar.timegm(d.timetuple())
登录后复制

此方法确保生成的时间戳代表 UTC 格式的日期。

将本地时间日期转换为自纪元以来的秒数

如果日期 d 位于本地时区,则使用 mktime() 可能会产生不正确的结果。为了解决这个问题,我们可以使用:

timestamp2 = time.mktime(d.timetuple())
登录后复制

但是,请注意,如果本地午夜与 UTC 午夜不同,timestamp1 和 timestamp2 可能会有所不同。

在 UTC 中转换 datetime.date不使用 calendar.timegm()

将 datetime.date 对象直接转换为 UTC时间戳,您可以使用以下公式:

timestamp = (utc_date.toordinal() - date(1970, 1, 1).toordinal()) * DAY
timestamp = (utc_date - date(1970, 1, 1)).days * DAY
登录后复制

将 UTC 格式的 datetime.datetime 转换为 POSIX 时间戳

对于已经采用 UTC 格式的 datetime.datetime 对象,可以使用以下方法:

  • Python 3.3 提供datetime.timestamp():
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
登录后复制
  • Python 3 (
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
登录后复制
  • Python 2:
timestamp = (dt - datetime(1970, 1, 1)).total_seconds()
登录后复制

将 Aware datetime 对象转换为 POSIX 时间戳

对于 aware datetime 对象(带有时区信息的日期时间),以下方法是推荐:

timestamp = dt.timestamp() # Python 3.3+
timestamp = (dt - epoch) / timedelta(seconds=1) # Python 3
timestamp = (dt - epoch) // timedelta(seconds=1) # Python 3 integer timestamp
登录后复制

以上是如何准确地将 Python `datetime.date` 和 `datetime.datetime` 对象转换为 UTC 时间戳?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板