Python:解析时间戳并计算毫秒级时间差

4
我有一份以"%H:%M:%S"格式表示的时间戳列表。例如:
  09:50:08.650000
  09:50:08.665000
  09:50:08.820000
  09:50:08.877000
  09:50:09.897000
  09:50:09.907000
  09:50:09.953000
  09:50:10.662000
  09:50:10.662000

我需要在Python中高效计算每行之间的毫秒时间差。

时间格式为'%H:%M:%S.%f' - eumiro
我明白了,谢谢。我现在有一个timedelta表示。我该如何计算毫秒差异? - LouisChiffre
2
int(diff.seconds * 1000. + diff.microseconds / 1000.) - eumiro
2个回答

7

%H:%M:%S.%f 是解析时间时要使用的格式字符串。请参阅http://docs.python.org/library/datetime.html#strftime-strptime-behavior

import datetime

times = """
09:50:08.650000
09:50:08.665000
09:50:08.820000
09:50:08.877000
09:50:09.897000
09:50:09.907000
09:50:09.953000
09:50:10.662000
09:50:10.662000
""".split()

# parse all times
times = [datetime.datetime.strptime(x, "%H:%M:%S.%f") for x in times]
for i in range(len(times) - 1):
    # compute timedelta between current and next time in the list
    print times[i + 1] - times[i]

结果如下:
0:00:00.015000
0:00:00.155000
0:00:00.057000
0:00:01.020000
0:00:00.010000
0:00:00.046000
0:00:00.709000
0:00:00

输出毫秒级差异:

delta = times[i + 1] - times[i]
print ((delta.days * 24 * 60 * 60 + delta.seconds) * 1000 + delta.microseconds / 1000)

请注意,时间间隔只在内部存储天、秒和微秒。其他单位会被转换。

转换为毫秒,请参见问题评论中的eurmiro的注释。 - LouisChiffre
谢谢你的提示。我已经添加了转换并包括了天数(如果需要的话)。 - Reiner Gerecke

2

我尝试使用datetime.strptime,但是使用“%H:%M:%S”作为格式会因毫秒而导致ValueError。 - LouisChiffre
你遇到了什么问题?你应该注意,在字符串中使用的浮点数对strptime()会产生问题,因为%S需要一个整数。 - Jordan
请参考@squidy的答案,他使用"%S.%f"作为时间格式正确地处理了“float”。我忽略了一个事实,即在字符串中你并不是在查看一个浮点数,因此可以直接使用“.”作为分隔符。 - Jordan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接