Python - 以毫秒为单位的时间差对我不起作用

Gre*_*reg 27 python

我已经阅读了一些关于此的帖子,并认为我有一些有用的代码.如果2个值之间的差值小于1秒,则显示的毫秒数是正确的.

如果差异超过一秒,它仍然只显示毫秒的差异.

如下.

正确:

 now_wind 2013-08-25 08:43:04.776209 
 first_time_wind 2013-08-25 08:43:04.506301
 time_diff 0:00:00.269908
 diff 269
Run Code Online (Sandbox Code Playgroud)

错 - 这应该是2000 + 76?:

 now_wind 2013-08-25 08:43:25.660427
 first_time_wind 2013-08-25 08:43:23.583902
 time_diff 0:00:02.076525
 diff 76


 #!/usr/bin/env python
 import datetime
 import time
 from time import sleep
 first_time_wind = datetime.datetime.now()
 sleep (2)
 now_wind = datetime.datetime.now()
 print "now_wind", now_wind
 print "first_time_wind", first_time_wind
 time_diff_wind = (now_wind - first_time_wind)
 print "time_diff", time_diff_wind
 print "diff", time_diff_wind.microseconds / 1000
Run Code Online (Sandbox Code Playgroud)

mol*_*are 60

尝试使用total_seconds方法:

print time_diff_wind.total_seconds() * 1000
Run Code Online (Sandbox Code Playgroud)

该方法相当于: (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6

注意:它自2.7版本开始提供

  • 添加`int(time_diff_wind.total_seconds()*1000)`得到毫秒,否则你仍然会有一些小数精度,如`17215.996` (3认同)

bla*_*kev 29

>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> a
datetime.datetime(2013, 8, 25, 2, 5, 1, 879000)
>>> b
datetime.datetime(2013, 8, 25, 2, 5, 8, 984000)
>>> a - b
datetime.timedelta(-1, 86392, 895000)
>>> b - a
datetime.timedelta(0, 7, 105000)
>>> (b - a).microseconds
105000
>>> (b - a).seconds
7
>>> (b - a).microseconds / 1000
105
Run Code Online (Sandbox Code Playgroud)

你的微秒不包括已经过的秒数


sha*_*ght 14

正确答案(2020 年)是:

>>> from datetime import timedelta
>>> timedelta(days=1, milliseconds=50) / timedelta(milliseconds=1)
86400050.0
Run Code Online (Sandbox Code Playgroud)

其他答案失去准确性和/或更冗长。


Cau*_*ons 10

我也面临这个问题,但在我的情况下我需要真正的毫秒精度,所以使用total_seconds() * 1000不是我的选择,所以我做的是:

def millis_interval(start, end):
    """start and end are datetime instances"""
    diff = end - start
    millis = diff.days * 24 * 60 * 60 * 1000
    millis += diff.seconds * 1000
    millis += diff.microseconds / 1000
    return millis
Run Code Online (Sandbox Code Playgroud)

我希望这有助于其他人!:)

  • 我认为total_seconds()返回一个浮点数并包含微秒,所以它确实保持毫秒精度,如果我错了就纠正我. (5认同)
  • @Samuel自Python 2.7以来就是如此.请参阅:https://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds (2认同)

Hyp*_*eus 6

从文档:

实例属性(只读):

属性值

日期介于-999999999和999999999之间

秒介于0和86399之间

微秒在0到999999之间

微秒不会超过999,999.因此,你的毫秒不会超过999.