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

时间:2011-05-13 22:02:54

标签: python datetime time

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

18 个答案:

答案 0 :(得分:580)

根据上面的@samplebias评论,我需要的是这里的所作所为:

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

Quick'n'easy。谢谢大家,抱歉大脑放屁。

重复使用:

import time

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

然后:

>>> current_milli_time()
1378761833768

答案 1 :(得分:72)

time.time()可能只会解决第二种情况,毫秒的首选方法是datetime

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

答案 2 :(得分:36)

def TimestampMillisec64():
    return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000) 

答案 3 :(得分:11)

另一种解决方案是您可以嵌入到自己的utils.py中的功能

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

答案 4 :(得分:9)

如果你想在你的代码中使用一个简单的方法返回带有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

答案 5 :(得分:9)

仅示例代码:

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

输出: 1534343781311

答案 6 :(得分:8)

在 3.7 之后的 Python 版本中,最佳答案是使用 time.perf_counter_ns()。如文档中所述:

time.perf_counter() -> float

<块引用>

返回性能计数器的值(以小数秒为单位),即具有最高可用分辨率的时钟以测量短持续时间。它确实包括睡眠期间经过的时间,并且是系统范围的。返回值的参考点未定义,因此只有连续调用结果之间的差异才有效。

time.perf_counter_ns() -> int

<块引用>

类似于 perf_counter(),但返回时间为纳秒

正如它所说,这将使用您的系统必须提供的最佳计数器,并且它是专门设计用于测量性能的(因此试图避免其他计时器的常见陷阱)。

它还为您提供了一个不错的纳秒整数,因此只需除以 1000000 即可获得毫秒数:

start = time.perf_counter_ns()
# do some work
duration = time.perf_counter_ns() - start
print(f"Your duration was {duration // 1000000}ms.")

答案 7 :(得分:3)

在Python 3.8+中进行了一些测试之后,我注意到这些选项至少在Windows 10中具有完全相同的结果。

import time

# Option 1
unix_time_ms_1 = int(time.time_ns() / 1000000)
# Option 2
unix_time_ms_2 = int(time.time() * 1000)

请随意使用您喜欢的更好的解决方案,我认为没有必要再使用更复杂的解决方案了。

答案 8 :(得分:2)

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

'Researcher': response.css(".field-item.even h2:contains(RESEARCHER) + p ::text").extract(), 

'Researcher': response.css(".field-item.even h3:contains(RESEARCHER) + p ::text").extract(),

答案 9 :(得分:0)

有效方法之一:

(time.time_ns() + 500) // 1000  #rounding last digit (1ms digit)

time.time_ns() // 1000          #flooring last digit (1ms digit)

在其他方法中,这两种方法都非常有效。

<块引用>

基准:

您可以在下面的我自己的机器上看到一些不同方法的基准测试结果

import time

t = time.perf_counter_ns()
for i in range(1000):
    o = time.time_ns() // 1000           #each 212 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)


t = time.perf_counter_ns()
for i in range(1000):
    o = (time.time_ns() + 500) // 1000  #each 223 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)


t = time.perf_counter_ns()
for i in range(1000):
    o = round(time.time_ns() / 1000)    #each 640 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)


t = time.perf_counter_ns()
for i in range(1000):
    o = int(time.time_ns() / 1000)      #each 500 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)


t = time.perf_counter_ns()
for i in range(1000):
    o = int(time.time()* 1000)          #each 407 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)

t = time.perf_counter_ns()
for i in range(1000):
    o = round(time.time()* 1000)       #each 438 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)```

答案 10 :(得分:0)

距Unix的时间

from time import time
while True:
    print(str(time()*1000)+'ms       \r', end='')

自程序启动以来的时间

from time import time
init = time()
while True:
    print(str((time()-init)*1000)+'ms         \r', end='')

感谢您的时间

答案 11 :(得分:0)

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

from time import time

x = time()
print(x)

我的结果(在Windows上)为:

1576095264.2682993

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

答案 12 :(得分:0)

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

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

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

答案 13 :(得分:0)

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

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

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

对于寻求更准确推理的人们来说,这只是一个想法,可以解决从未真正使用过的数据库空白。

答案 14 :(得分:0)

From version 3.7 you can use time.time_ns() to get time as passed nano seconds from epoch. So you can do

ms = time.time_ns() // 1000 

to get time in mili-seconds as integer.

答案 15 :(得分:-2)

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

int(datetime.datetime.timestamp(datetime.datetime.now()) * 1000)

答案 16 :(得分:-3)

微秒是1/1000000秒,毫秒是1/1000秒

dt.microseconds / 1000.0应为dt.microseconds / 1000000.0

答案 17 :(得分:-4)

    from datetime import datetime
    d = datetime.now()
    print d.microsecond/1000 + d.second*1000