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

Python-以毫秒为单位的时间差对我不起作用,python,Python,我读过一些关于这方面的帖子,认为我有一些代码可以工作。如果两个值之间的差值小于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.6604

我读过一些关于这方面的帖子,认为我有一些代码可以工作。如果两个值之间的差值小于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

从文件中:

实例属性(只读):

属性值

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

0到86399(含)之间的秒数

0到0之间的微秒 9999999


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

来自文档:

实例属性(只读):

属性值

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

0到86399(含)之间的秒数

0到0之间的微秒 9999999


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

请尝试使用总秒数方法:

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

注意:它从2.7版开始提供


尝试使用total_seconds方法:

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

注意:它从2.7版开始提供

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


你的微秒不包括已经过去的秒数,我也遇到了这个问题,但在我的情况下,我需要真正的毫秒精度,因此使用
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

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

我也遇到了这个问题,但我需要真正的毫秒精度,所以使用
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
我希望这对其他人有帮助!:)

正确答案(2020年)是:

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

正确答案(2020年)是:


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

我认为total_seconds()返回一个浮点数,并包含微秒,因此它确实保留毫秒精度,如果我错了,请更正。@Samuel这是自Python 2.7版以来的事实。请参阅:@Samuel只要总秒数不太大以致浮点丢失精度,则应首选
total_seconds()
方法。“大”是在中解释的,并且远远超过了人类的寿命,因此我想不出有多少应用程序需要十进制精度。@Samuel,但它不跟踪较长的时间跨度,如分钟、小时等,因此每当这些时间跨度重置为零时,就会得到错误的结果。我认为total_seconds()返回一个浮点数,并包括微秒,所以它确实保持毫秒精度,如果我错了,请纠正我。@Samuel这是自Python 2.7版以来的真实情况。请参阅:@Samuel只要总秒数不太大以致浮点丢失精度,则应首选
total_seconds()
方法。“大”是在中解释的,并且远远超过了人类的寿命,因此我想不出有多少应用程序需要十进制精度。@Samuel,但它不跟踪较长的时间跨度,如分钟、小时等,因此每当这些时间跨度重置为零时,就会得到错误的结果。添加
int(time\u diff\u wind.total\u seconds()*1000)
仅获取毫秒,否则,您仍将有一些十进制精度,如
17215.996
add
int(time_diff\u wind.total_seconds()*1000)
以获得毫秒,否则您仍将有一些十进制精度,如
17215.996
。同样可以用于不同的单位:
int(timedelta(天=1,毫秒=50)/timedelta(微秒=1))
int。同样可以用于不同的单位:
int(timedelta(天=1,毫秒=50)/timedelta(微秒=1))