在 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 对象,可以使用以下方法:
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
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中文网其他相关文章!