What is the easiest way to get current GMT time in Unix timestamp format?
python提供了不同的包(datetime、time、calendar,可以在这里看到,以便处理时间。我犯了一个很大的错误,用以下方法得到了当前的格林威治时间time.mktime(datetime.datetime.utcnow().timetuple())
在Unix时间戳中获取当前GMT时间的简单方法是什么?
- 什么是输入/输出?datetime.utcnow()返回当前的UTC时间作为datetime对象(我假设您在谈论"GMT时间"时需要使用UTC)。time.time()直接返回unix时间戳作为浮点数。下面介绍如何将表示UTC时间的date time.date/date time.date time转换为posix时间戳。
- 你提出的方法是错误的,还是过于冗长?相关:stackoverflow.com/questions/15940280/…
- 为什么你的方法是错误的?
我将使用time.time()以秒为单位获取时间戳。
1 2 3
| import time
time.time() |
输出:
对于大多数平台上的标准CPython实现,这将返回一个UTC值。
- 关键是您机器的本地时钟可能不在UTC中。
- @9000:是的,尽管我总是坚持在任何时间重要的环境中使用UTC。他要求的是最简单的解决方案。请注意,在现代平台上使用cpython,包括Linux、BSD、Mac OS X和Windows,将返回time.time()的UTC。这反映了这些操作系统上C标准库的时间函数的行为。
- @9000:当地时区无关紧要。Unix时间对应于UTC时间(如果忽略闰秒左右的时间)。想一想:时间戳是自纪元以来经过的秒数(时间上的固定时刻):为什么它取决于时区机器的本地时钟使用的是什么?在任何给定的时间点上,UNIX时间在世界各地都是相同的。某些(未知)平台可能使用不同的时代,但其值仍然不依赖于本地时区。
- @J.F.塞巴斯蒂安:谢谢!这是有道理的,我接受纠正。
- stackoverflow.com/questions/13890935/…
1 2 3
| import time
int(time.time()) |
输出:
- 虽然这个代码片段可以解决这个问题,但包含一个解释确实有助于提高文章的质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您的代码建议的原因。
这有帮助吗?
1 2 3 4 5 6
| from datetime import datetime
import calendar
d = datetime.utcnow()
unixtime = calendar.timegm(d.utctimetuple())
print unixtime |
如何将python utc datetime对象转换为unix时间戳
- 您也可以使用time.gmtime(),而不是datetime.utcnow().utctimetuple()。
- 链接已断开!
- @Gauravdave谢谢,我已经用存档版本更新了链接。
- @凯纳文就是一个例子。如果您想要当前的时间戳,那么您可以简单地调用time.time(),根本不需要进行日期时间转换。
- fwiw:这不是UTC时间,而是将UTC转换为本地时间。要在UTC中获取时间戳,您必须执行其他操作。
或者只是使用日期时间标准模块
1 2 3 4
| In [2]: from datetime import timezone, datetime
...: int(datetime.now(tz=timezone.utc).timestamp() * 1000)
...:
Out[2]: 1514901741720 |
根据需要的分辨率,可以截断或乘法。这个例子是输出毫秒。
如果需要适当的UNIX时间戳(以秒为单位),请删除* 1000。
- 您的代码非常明确地将时间强制为整数,所以我很困惑为什么输出文本是十进制数字?
- 是的,我的错,我后来加了整型。
- 这与javascript moment库的moment().utc().valueOf()完全相同。正是我要找的。谢谢
- Unix时间戳应该是1970年以来的秒数。你的解决方案不会产生这种效果。
- "你可以根据你想要的分辨率进行截短或相乘"去掉*1000部分,你会得到秒。
我喜欢这种方法:
1 2 3 4
| import datetime, time
dts = datetime.datetime.utcnow()
epochtime = round(time.mktime(dts.timetuple()) + dts.microsecond/1e6) |
这里发布的其他方法要么不能保证在所有平台上都提供UTC,要么只报告整秒钟。如果你想要完全的分辨率,这是可行的,微秒。
- 不幸的是,除非你正好在一个UTC+0000时区内,否则这似乎并没有给UTC带来什么好处。不过,使用utctimetuple来代替。
1 2
| from datetime import datetime as dt
dt.utcnow().strftime("%s") |
输出:
- 对我来说,这与time.time()的回报不一样。
- 这可能是因为dt.utcnow返回的datetime没有时区信息。那么,strftime假设datetime是当地时间。