如何获得自纪元以来的毫秒数?
请注意,我想要实际的毫秒数,而不是将秒乘以1000。我正在比较需要毫秒精度的不到1秒的时间。 (我查看了许多答案,它们似乎都有*1000)
我正在比较POST请求中获取的时间与服务器上的结束时间。 我只需要两个时间处于相同的格式,无论是什么格式。 我认为Unix时间可以工作,因为Javascript有一个函数可以获取它。
如何获得自纪元以来的毫秒数?
请注意,我想要实际的毫秒数,而不是将秒乘以1000。我正在比较需要毫秒精度的不到1秒的时间。 (我查看了许多答案,它们似乎都有*1000)
我正在比较POST请求中获取的时间与服务器上的结束时间。 我只需要两个时间处于相同的格式,无论是什么格式。 我认为Unix时间可以工作,因为Javascript有一个函数可以获取它。
time.time() * 1000
如果可能的话,将会给你毫秒级别的精度。
int(time.time() * 1000)
会实现你所需的功能。time.time()
通常返回一个双精度浮点数,表示自纪元以来经过的秒数,因此乘以1000不会影响精度。
对于@kqr误导性答案的另一个说明:time.clock()
不能给出纪元时间。对于Unix系统,它给出进程在CPU上运行的时间,而对于Windows系统,它给出自函数第一次调用以来经过的时间,请参见Python文档。
此外,确实有文档说明time.time()
无法保证毫秒级精度。尽管这主要是为了确保您不依赖于嵌入式或早期硬件上的这种精度,但我不知道任何例子,您无法获得毫秒级精度。
我看到很多人建议使用 time.time()
。虽然time.time()
是衡量实际日期时间的准确方法,但是它不能保证给出毫秒级精度!从文档中可以看出:
请注意,尽管时间始终作为浮点数返回,但并非所有系统都提供比1秒更高的精度。虽然此函数通常返回不递减值,但如果在两次调用之间系统时钟被设置回,则它可能会返回低于先前调用的值。
这不是你在比较两个时间时想要的过程!它可能会以许多有趣的方式失败,而你无法判断发生了什么。事实上,在比较两个时间时,你并不真正需要知道当前时间,只需要知道两个值具有相同的起始点。为此,time
库提供了另一个过程:time.clock()
。文档说:
在Unix上,返回当前处理器时间作为以秒为单位的浮点数。精度,事实上,甚至“处理器时间”的含义的定义,取决于同名C函数的定义,但无论如何,这是用于基准测试Python或计算算法时间的功能。
在Windows上,此函数返回自第一次调用此函数以来经过的挂钟秒数,作为浮点数,基于Win32函数QueryPerformanceCounter()。分辨率通常比一微秒更好。
使用time.clock()
。
或者,如果你只是想测试代码运行速度,可以方便地使用timeit.timeit()
,它会为你做所有的测量,并且是代码执行中测量经过时间的事实标准方法。
clock()
函数调用之间的差值会给出最准确的经过时间。使用 time()
函数可能无法精确测量时间差,甚至可能会得到负数! - kqrfac()
的需要占用大约 0.58 秒的 CPU 时间,但实际时间却是约 7.5 秒。这是因为它们没有得到完全的 CPU 注意力,一个原本只需要在 0.58 秒内完成的任务由于并行处理而需要花费 7.5 秒的时间。 - glglgl使用datetime库:
>>> import datetime
>>> delta = datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)
>>> delta
datetime.timedelta(15928, 52912, 55000)
>>> delta.total_seconds()
1376232112.055
>>> delta.days, delta.seconds, delta.microseconds
(15928, 52912, 55000)
https://www.python.org/dev/peps/pep-0564/
https://docs.python.org/3/library/time.html#time.time_ns
import datetime
time = datetime.datetime.now()
ms = time.microsecond
time.perf_counter()
(只有相对值才有意义)来测量短时间间隔,而不是由time.time()
提供的绝对时间。 - jfs