如何创建带有毫秒精度的Python时间戳?

44 投票
3 回答
100069 浏览
提问于 2025-04-16 14:12

我需要一个从1970年1月1日开始到现在的时间戳,单位是毫秒(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

这样不够准确。

3 个回答

4

请注意,虽然你可以用time.time()乘以你想要的精度,但这并不意味着你的设备真的能达到那个精度。例如,在Windows系统上,它的精度只有正负1毫秒(来源)。 为了提高准确性,请使用:

import time

now_ns = time.time_ns() # Time in nanoseconds
now_ms = int(now_ns / 1000000)

这个方法只适用于Python 3.7及以上版本

14

在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_millis = (now - epoch) // timedelta(milliseconds=1) # or `/ 1e3` for float

理论上,time.gmtime(0)(这是 time.time() 使用的起始时间)可能和 1970 不一样。

66
import time
time.time() * 1000

这里的1000是指每秒有1000毫秒。如果你只想要从纪元(也就是1970年1月1日)开始到现在的时间,以百分之一秒为单位的话,就把这个值乘以100。

撰写回答