python中datetime类型的utc时间如何转成时间戳?

发布于 2022-09-03 01:06:50 字数 187 浏览 23 评论 0

import datetime

now = datetime.datetime.utcnow()
这个now如何转成时间戳。。
用time.mktime(now.timetuple())这个方法产生的时间戳比time.time()产生的时间戳少28800秒,
现在我的方法是手动加上28800秒产生时间戳,,有没有更好的方法

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

也只是曾经 2022-09-10 01:06:51
import calendar
calendar.timegm(utc_timetuple)
Spring初心 2022-09-10 01:06:51

其实这里题主理解错了 mktime 的意思,我们来看一下 python 的官方文档:

time.mktime(t)
This is the inverse function of localtime(). Its argument is the struct_time or full 9-tuple (since the dst flag is needed; use -1 as the dst flag if it is unknown) which expresses the time in local time, not UTC. It returns a floating point number, for compatibility with time(). If the input value cannot be represented as a valid time, either OverflowError or ValueError will be raised (which depends on whether the invalid value is caught by Python or the underlying C libraries). The earliest date for which it can generate a time is platform-dependent.

mktime 传递的应该是本地的时间,而不是 utc 时间,所以,如果你想获得指定 utc 时间的时间戳,简单点的方法有:

  1. 直接减 Unix 的时间戳开始时间,也就是

timestamp = (now - datetime(1970, 1, 1)).total_seconds()
  1. 转换成本地时间

now = datetime.datetime.now()
timestamp = time.mktime(now.timetuple())

当然,方法是有很多的,这里只是列举两种比较容易理解的方法。如果想知道更多的内容,这里有个链接可以供题主参考:Converting datetime.date to UTC timestamp in Python

爱要勇敢去追 2022-09-10 01:06:51

@yylucifer 说的很好。 主要时timezone的转换问题。
对于你的问题,可以用下面方法

# 基本上相等,但是会由于计算的耗时导致无法完全相等
# time.timezone:The offset of the local (non-DST) timezone, in seconds west of UTC 
time.mktime(datetime.datetime.utcnow().timetuple()) == time.time() + time.timezone 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文