49

我已经阅读了一些关于此的帖子,并认为我有一些有效的代码。如果 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

错误 - 这应该是 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
4

5 回答 5

82

尝试使用 total_seconds 方法:

print time_diff_wind.total_seconds() * 1000

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

注意:它从 2.7 版本开始可用

于 2013-08-25T08:04:19.013 回答
45
>>> 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

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

于 2013-08-25T08:08:44.567 回答
18

正确答案(2020 年)是:

>>> from datetime import timedelta
>>> timedelta(days=1, milliseconds=50) / timedelta(milliseconds=1)
86400050.0

其他答案失去精度和/或更冗长。

于 2020-04-23T14:10:42.777 回答
17

我也遇到了这个问题,但在我的情况下,我需要真正的毫秒精度,所以使用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

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

于 2014-09-19T11:16:32.587 回答
8

从文档中:

实例属性(只读):

属性值

天数介于 -999999999 和 999999999(含)之间

秒 0 到 86399(含)之间

微秒 0 到 999999(含)之间

微秒从不超过 999,999。因此,您的毫秒数永远不会超过 999。

于 2013-08-25T08:03:30.283 回答