获取当前时间(以毫秒为单位)在Python中?


531

如何在Python中获取以毫秒为单位的当前时间?


67
import time; ms = time.time()*1000.0
samplebias

4
@samplebias:time.time()可能提供比datetime.utcnow()某些平台和python版本更差的精度。
jfs 2015年

5
以毫秒为单位,因为?如果你从纪元(午夜1 1970年1月UTC)的意思是,看到这一点:stackoverflow.com/questions/18169099/...
迈克尔Scheper

2
对于真正的微秒级分辨率毫秒时间戳在这里看到:stackoverflow.com/questions/38319606/...
加布里埃尔斯台普斯

Answers:


709

根据我上面的@samplebias的评论,这是我需要做的:

import time
millis = int(round(time.time() * 1000))
print millis

快点 谢谢大家,为您的大脑屁感到抱歉。

要重用:

import time

current_milli_time = lambda: int(round(time.time() * 1000))

然后:

>>> current_milli_time()
1378761833768

34
这可能无法给出正确的答案。根据文档,“请注意,即使始终将时间作为浮点数返回,但并非所有系统都提供比1秒更好的精度的时间”
Jason Polites 2012年

11
我想知道,为什么需要round?看来int(time.time() * 1000)够了吗?
Maxim Vladimirsky

14
IMO我会用地板而不是圆形,但这就是我。如果有人问时辰是什么,以及它是7:32,他们可能需要数为7个,不是8
davr

1
@ParallelUniverse:.utcnow()使用GetSystemTimeAsFileTime()在Windows上最近CPython的。不会time.clock()QueryPerformanceCounter())引入更多的噪声,以至于无法降低噪声?请参见精度与精度不相同
jfs 2015年

10
@MaximVladimirsky这不是int()的行为。Int不设底值,而是舍入为零。对于正数,这是相同的,但对于负数,则相反。int(1.5)给出1,int(-1.5)给出-1,math.floor(-1.5)给出-2请参见:docs.python.org/2/library/stdtypes.html
跳过霍夫曼

91

time.time()可能只提供秒的分辨率,毫秒的首选方法是datetime

from datetime import datetime
dt = datetime.now()
dt.microsecond

94
不太有用-这只会让您 dt 秒获得微秒数。参见stackoverflow.com/a/1905423/74632
Boris Chervenkov,2012年

8
+1,因为这是从系统获取可靠时间戳的官方方法。
Pascal

16
-1。这是对这个问题的不正确答案。正如@Boris所评论的那样,这不提供“以微秒为单位的时间”,例如,不包括以微秒为单位的天,小时,秒。
2015年

3
+1这给出了正确的值,并且可以假定算术有效,因为数学。如果用户需要以毫秒/微秒为单位的当前时间,则可以通过简单的算法将其显示在此处。如果需要时间增量(不需要),则算术可以节省时间。
杰克·斯托特

3
提供当前时间的微秒,而不是整个时间戳。
kawadhiya21 '18


35

3.7版开始,您可以time.time_ns()用来获取从纪元开始经过的纳秒级的时间。所以你可以做

ms = time.time_ns() // 1000000 

以毫秒为单位获取时间作为整数。


这最适合我(Python 3.7.6)
Paul Watson

22

只是示例代码:

import time
timestamp = int(time.time()*1000.0)

输出:1534343781311


13

另一个解决方案是可以嵌入到自己的utils.py中的函数

import time as time_ #make sure we don't override time
def millis():
    return int(round(time_.time() * 1000))

12

如果您想在代码中使用一个简单的方法来返回带有datetime的毫秒数:

from datetime import datetime
from datetime import timedelta

start_time = datetime.now()

# returns the elapsed milliseconds since the start of the program
def millis():
   dt = datetime.now() - start_time
   ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0
   return ms

这是两次之间的时间差(以毫秒为单位),将您的方法与@Jason的答案结合起来可以得到以毫秒为单位的当前时间戳...考虑一下,UNIX时间戳将是您的方法,其中start_time= datetime(1970,1,1)
PR

当地时间可能是模棱两可且非单调的(由于DST转换或更改本地utc偏移的其他原因)。使用.utcnow()代替,或者如果您不需要绝对时间,则可以使用time.monotonous()。注意:由于启用了真除法some_int + dt.microseconds/ 1000.0的公式( ) / 10**3与之间的浮点运算,因此存在细微差别。请参阅相关答案中的明确公式和链接total_seconds()
jfs

7

我发现以毫秒为单位获取当前UTC时间的最简单方法是:

# timeutil.py
import datetime


def get_epochtime_ms():
    return round(datetime.datetime.utcnow().timestamp() * 1000)

# sample.py
import timeutil


timeutil.get_epochtime_ms()

7

如果您担心测量经过的时间,则应使用单调时钟(python 3)。该时钟不受系统时钟更新的影响,例如,您会看到NTP查询是否调整了系统时间。

>>> import time
>>> millis = round(time.monotonic() * 1000)

它提供了以秒为单位的参考时间,可用于以后进行比较以测量经过的时间。


4

如果您使用我的代码(如下所示),则时间将以秒为单位,然后在十进制后为毫秒。我认为Windows和Unix之间有区别-如果有区别,请发表评论。

from time import time

x = time()
print(x)

我的结果(在Windows上)是:

1576095264.2682993

编辑:没有区别:)谢谢tc0nn


1
Mac OSX上无差异:/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
tc0nn

1
在Ubuntu 18上没有区别:python3 scratch.py 1577212763.9136133
tc0nn

1

这些乘以1000毫秒的乘法对于解决或使某些先决条件可接受可能是不错的选择。它可以用来填补数据库中实际上从未使用过的空白。虽然,对于需要精确定时的实际情况,它最终会失败。我不建议任何人将这种方法用于需要执行操作或在特定时间进行处理的关键任务操作。

例如:在美国,双向ping是30-80毫秒...您不能将其四舍五入并有效地使用它。

我自己的示例要求每秒执行一次任务,这意味着如果我在响应第一个任务后将其四舍五入,仍然会导致处理时间乘以每个主循环周期。最终每60秒调用一次函数。每天大约是1440 ..不太准确。

对于那些希望寻求更准确推理而不是解决从未真正使用过数据库缺口的人们来说,这只是一个想法。


2
您有更好的解决方案吗?老实说,我完全听不懂你在说什么。“向上舍入”是什么意思?
不朽之夜

2
用一个更好的理解的实际例子来说明您的解决方案
Ratan Uday Kumar

0

这是使用datetime适用于Python 3 的模块的另一种解决方案。

datetime.datetime.timestamp(datetime.datetime.now())
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.