如何创建具有毫秒粒度的 Python 时间戳?

Posted

技术标签:

【中文标题】如何创建具有毫秒粒度的 Python 时间戳?【英文标题】:How can I create a Python timestamp with millisecond granularity? 【发布时间】:2011-07-20 17:35:55 【问题描述】:

我需要一个自纪元以来的毫秒 (ms) 时间戳。这应该不难,我确定我只是缺少一些 datetime 或类似的方法。

实际上微秒 (µs) 粒度也很好。我只需要不到 1/10 秒的时间。

示例。我有一个每 750 毫秒发生一次的事件,可以说它检查灯是打开还是关闭。我需要记录每项检查和结果并稍后查看,因此我的日志需要如下所示:

...00250 Light is on
...01000 Light is off
...01750 Light is on
...02500 Light is on

如果我只有完整的第二个粒度,我的日志将如下所示:

...00 Light is on
...01 Light is off
...01 Light is on
...02 Light is on

不够准确。

【问题讨论】:

澄清一下——一微秒是百万分之一秒,一毫秒是千分之一秒 微或毫都可以。我只需要不到 1/10 秒(一厘秒) 0.1s 是分秒。一厘秒是 0.01 秒。 【参考方案1】:
import time
time.time() * 1000

其中 1000 是每秒毫秒数。如果你想要的只是纪元以来的百分之一秒,请乘以 100。

【讨论】:

..or int((time.time() + 0.5) * 1000) 将其作为最接近的毫秒整数。 @bgporter:或int(round(time.time() * 1000)) 好的,所以 time.time() 以 1/100 的粒度给我十进制秒。这样就可以了。 好吧,除了我需要把它从指数符号中提取出来 @Skip: int(round(time.time() * 1000)) 给了我1300819189007。你在用它做些奇怪的事情吗?【参考方案2】:

在 Python 中,datetime.now() 可能会产生一个比 time.time() 更精确的值:

from datetime import datetime, timezone, timedelta

now = datetime.now(timezone.utc)
epoch = datetime(1970, 1, 1, tzinfo=timezone.utc) # use POSIX epoch
posix_timestamp_micros = (now - epoch) // timedelta(microseconds=1)
posix_timestamp_millis = posix_timestamp_micros // 1000 # or `/ 1e3` for float

理论上,time.gmtime(0)time.time() 使用的纪元)可能与1970 不同。

【讨论】:

为了让您的代码正常工作,我将 datetime.datetime 添加到调用中 @TomChapin 错误。答案中的代码按原样工作。查看代码第一行的导入。

以上是关于如何创建具有毫秒粒度的 Python 时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

具有毫秒精度的时间戳:如何将它们保存在 MySQL 中

如何以毫秒为单位获取firebase服务器的当前时间戳?

合并两个不同时间粒度的时间序列

Python获取秒级时间戳与毫秒级时间戳

如何找到纪元时间戳和 std::chrono::system_clock::now 之间的时间差(以毫秒为单位)

sql 从字符串..with毫秒的Oracle日期时间戳格式化。该示例还使用listagg在oracle中具有行的聚合