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

如何创建具有毫秒粒度的Python时间戳?,python,datetime,timestamp,Python,Datetime,Timestamp,我需要一个从epoch开始的毫秒(ms)的时间戳。这应该不难,我确信我只是缺少了一些datetime或类似的方法 实际上,微秒(µs)粒度也很好。我只需要1/10秒的计时 例如。我有一个每750毫秒发生一次的事件,假设它检查灯是亮还是关。我需要记录每次检查和结果,稍后再查看,因此我的日志需要如下所示: …00250指示灯亮起 …01000灯熄灭 …01750灯亮着 …02500灯亮着 如果我只有完整的第二粒度,我的日志将如下所示: …00灯亮起 …01灯熄灭 …01灯亮着 …02灯亮着 不够

我需要一个从epoch开始的毫秒(ms)的时间戳。这应该不难,我确信我只是缺少了一些
datetime
或类似的方法

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

例如。我有一个每750毫秒发生一次的事件,假设它检查灯是亮还是关。我需要记录每次检查和结果,稍后再查看,因此我的日志需要如下所示:

…00250指示灯亮起
…01000灯熄灭
…01750灯亮着
…02500灯亮着
如果我只有完整的第二粒度,我的日志将如下所示:

…00灯亮起
…01灯熄灭
…01灯亮着
…02灯亮着
不够准确

import time
time.time() * 1000

其中1000是毫秒每秒。如果您只需要纪元后的百分之一秒,则乘以100。

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


理论上,
time.gmtime(0)
(time.time()
)使用的历元可能不同于
1970

。或者
int((time.time()+0.5)*1000)
,以获取最接近的整数ms。@bgporter:或者
int(四舍五入(time.time()*1000))
。好的,时间()给我的是1/100粒度的十进制秒。那就行了。好吧,除了我需要把它从指数中拉出来notation@Skip:
int(round(time.time()*1000))
给了我
1300819189007
。你用它做了什么奇怪的事情吗?只是澄清一下-微秒是百万分之一秒,百万分之一秒是千分之一秒,微秒或百万分之一秒是可以的。我只需要不到1/10秒(1厘米秒)0.1秒是分秒。百分之一秒是0.01s。为了让代码正常工作,我添加了一个选项,将datetime.datetime添加到calls@TomChapin错。答案中的代码按原样工作。查看代码第一行中的导入。
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