Get current time in milliseconds in Python?
如何在python中获取以毫秒为单位的当前时间?
- import time; ms = time.time()*1000.0
- @samplebias:time.time()在某些平台和python版本上的精度可能比datetime.utcnow()差。
- 从什么时候开始以毫秒为单位?如果您的意思是从新纪元开始(1970年1月1日午夜,UTC),请参见:stackoverflow.com/questions/18169099/…
- 要获得真正的微秒分辨率毫秒时间戳,请参阅此处:stackoverflow.com/questions/38319606/…
对于我所需要的,下面是我所做的,基于上面的@samplebias'评论:
1 2 3
| import time
millis = int(round(time.time() * 1000))
print millis |
快一点。谢谢大家,对不起,脑筋出了个屁。
重复使用:
1 2 3
| import time
current_milli_time = lambda: int(round(time.time() * 1000)) |
然后:
1 2
| >>> current_milli_time()
1378761833768 |
- 这可能无法给出正确的答案。根据文档,"请注意,尽管时间总是以浮点数返回,但并非所有系统提供的时间精度都高于1秒。"
- 我想知道,你为什么要用round?看来江户一〔一〕就够了?
- @maximvladimirsky python的int方法实际上是floor的值,它不取整它们。因此,round()ing 25.7将按预期给我们26,但只要发送到int()将给我们25。很奇怪,但事情就是这样。有趣。
- 在我看来,我会用地板而不是圆形,但那只是我自己。如果有人问一个小时是多少,是7:32,他们可能想要的数字是7,而不是8。
- @Davr,我们说的是微秒到毫秒的取整…
- 如下面的答案所示,在windows下,datetime.now()或time.time()的分辨率是几毫秒。为了获得更好的分辨率,您应该将now()与time.clock()结合使用,后者捕获操作系统的高性能计数器,从而产生usec分辨率。
- @平行宇宙:.utcnow()在最近的cpython windows上使用GetSystemTimeAsFileTime()。time.clock()呼叫(QueryPerformanceCounter()呼叫)会不会带来比它可能减少的更多的噪音?见精度与精度不一样。
- 拉姆达号接近地狱般的岩石。再深入一点,谢谢@naftulitzvikay
- 在Windows7中至少有1/100秒看起来不错,对我来说已经足够好了。
- @MaximVladimirsky不是int()的行为。int不生成值,它向零取整。正数也是一样的,负数是相反的。int(1.5)给出1,int(-1.5)给出-1,math.floor(-1.5)给出-2参见:docs.python.org/2/library/stdtypes.html
- 要获得真正的微秒分辨率毫秒时间戳,请参阅此处:stackoverflow.com/questions/38319606/…
- 对于以毫秒为单位的历元时间,这是相同的答案。
- 确定到微秒分辨率的差异(如基准代码)和获得今天的一般时间(高达毫秒)是非常不同的要求,并且需要不同的工具来实现这一点。事实上,实时时钟硬件的精度只有毫秒级,x86 CPU为微秒级的东西提供了另一种功能。在python 3中使用time.perf_counter()以达到微秒的目的。
- @Naftuli-kay我看到了int与round(floor与round),但是如果你使用round()的话,你还需要int(round())吗?
time.time()只能对第二个给出解决方案,毫秒的首选方法是datetime。
1 2 3
| from datetime import datetime
dt = datetime.now()
dt.microsecond |
- 不太有用-这只会在dt的秒内给你微秒。见stackoverflow.com/a/1905423/74632
- +1因为这是从系统中获取可靠时间戳的官方方法。
- 实际上,问题是毫秒而不是微秒,这并不容易
- @简:在某些系统上的旧的cpython版本上,datetime.utcnow()本可以提供比time.time()更好的分辨率。尽管在大多数系统或当前的cpython中,time.time()和datetime.utcnow()都使用相同的底层OS API来获取时间。@用户3324131显示如何从datetime.utcnow()获取毫秒。
- - 1。这是对这个问题的错误回答。正如@boris所评论的,这并没有给出"以微秒为单位的时间",例如,不包括以微秒为单位的天、小时、秒。
- +1这给出了一个正确的值,并且由于数学原因,可以假定算术运算有效。如果用户需要以毫秒/微秒为单位的当前时间,简单的算术将把它们带到那里。如果需要一个时间增量——这不是要求的——算术,同样可以节省一天的时间。
- @J-A:很容易加上与天相对应的微秒,等等。
- @J.F.塞巴斯蒂安不,不是。你不知道其中一天是否有闰秒。
- @J-A:它确实包括"天、小时、秒"(它修复了你评论中指出的问题)。为了解决新问题(闰秒):posix time不计算闰秒,time.time()在python支持的大多数系统上返回posix time(如果我们排除不常见的"正确"时区)。不要混淆精度和准确性——这个问题是关于毫秒精度——如果您需要毫秒精度,那么您需要首先讨论时钟同步、NTP(LAN与WAN)等。
- @J.F.塞巴斯蒂安,你说得对。不过,答案仍然需要更新。
- 给出当前时间的微秒,而不是整个时间戳。
- 您可能希望使用microsecond而不是millisecond。
1 2
| def TimestampMillisec64():
return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000) |
- 您可以内联.total_seconds()的公式以产生(可能)更好的精度:(td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3(启用真正的除法),或者如果您想截断毫秒,则使用// 10**3。
- 如果使用datetime,这似乎是最好的答案
另一个解决方案是可以嵌入到自己的utils.py中的函数。
1 2 3
| import time as time_ #make sure we don't override time
def millis():
return int(round(time_.time() * 1000)) |
如果您希望在代码中使用一个简单的方法,返回带有日期时间的毫秒数:
1 2 3 4 5 6 7 8 9 10
| 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 s answer组合后,将以毫秒为单位给出当前时间戳…考虑到这一点,Unix时间戳将是您使用start_time=datetime(1970,1,1)的方法。
- 本地时间可能不明确且不单调(由于DST转换或其他原因更改本地UTC偏移)。用.utcnow()代替,或者如果你不需要绝对时间,你可以用time.monotonous()。注:在启用真除法的情况下,some_int + dt.microseconds/ 1000.0与公式( ) / 10**3之间由于浮点运算存在细微差异。见相关答案中total_seconds()的显式公式及链接。
只是示例代码:
1 2
| import time
timestamp = int(time.time()*1000.0) |
输出:一兆五千三百四十三亿四千三百七十八万一千三百一十一
我找到的获取当前UTC时间(毫秒)的最简单方法是:
1 2 3 4 5 6 7 8 9 10 11 12
| # timeutil.py
import datetime
def get_epochtime_ms():
return round(datetime.datetime.utcnow().timestamp() * 1000)
# sample.py
import timeutil
timeutil.get_epochtime_ms() |
微秒是1/1000000秒,毫秒是1/1000秒,所以
dt.microseconds/1000.0应为dt.microseconds/1000000.0
- 请格式化您的答案以提高其可读性。另外,您还没有真正回答问题的第一部分"如何获得当前时间?".
1 2 3
| from datetime import datetime
d = datetime.now()
print d.microsecond/1000 + d.second*1000 |