我有两个时间,开始时间和停止时间,格式为10:33:26 (HH:MM:SS)。我需要知道两次的差值。我一直在查阅Python文档并在网上搜索,我可以想象它与datetime和/或time模块有关。我不能让它正常工作,一直在寻找如何在约会时做到这一点。

最后,我需要计算多个时间持续时间的平均值。我得到了时差,我把它们存储在一个列表中。现在我需要计算平均值。我用正则表达式来解析出原始时间,然后求出差异。

对于平均,我应该转换成秒然后平均吗?


当前回答

通常,您需要处理多个case,并且可能使用pd.DataFrame(data)格式。然后:

import pandas as pd

df['duration'] = pd.to_datetime(df['stop time']) - pd.to_datetime(df['start time'])

不需要任何手动转换就可以得到时差。

取自将DataFrame列类型从字符串转换为日期时间。

如果你很懒,不介意熊猫的开销,那么你可以这样做,即使只是一个条目。

其他回答

看一下datetime模块和timedelta对象。您最终应该为开始和停止时间构造一个datetime对象,当您减去它们时,您将得到一个timedelta。

import datetime as dt
from dateutil.relativedelta import relativedelta

start = "09:35:23"
end = "10:23:00"
start_dt = dt.datetime.strptime(start, "%H:%M:%S")
end_dt = dt.datetime.strptime(end, "%H:%M:%S")
timedelta_obj = relativedelta(start_dt, end_dt)
print(
    timedelta_obj.years,
    timedelta_obj.months,
    timedelta_obj.days,
    timedelta_obj.hours,
    timedelta_obj.minutes,
    timedelta_obj.seconds,
)

结果: 0 0 0 0 -47 -37

time和datetime都有一个日期组件。

通常情况下,如果你只是处理时间部分,你会提供一个默认日期。如果您只是对差异感兴趣,并且知道两个时间都在同一天,那么为每个时间构造一个datetime,将日期设置为今天,并从停止时间减去开始时间以获得间隔(timedelta)。

我喜欢这家伙的做法——https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps。 不确定它是否有缺点。

但对我来说看起来很整洁:)

from datetime import datetime
from dateutil.relativedelta import relativedelta

t_a = datetime.now()
t_b = datetime.now()

def diff(t_a, t_b):
    t_diff = relativedelta(t_b, t_a)  # later/end time comes first!
    return '{h}h {m}m {s}s'.format(h=t_diff.hours, m=t_diff.minutes, s=t_diff.seconds)

关于这个问题,您仍然需要使用datetime.strptime(),就像其他人前面说的那样。

这个网站建议你试试:

import datetime as dt
start="09:35:23"
end="10:23:00"
start_dt = dt.datetime.strptime(start, '%H:%M:%S')
end_dt = dt.datetime.strptime(end, '%H:%M:%S')
diff = (end_dt - start_dt) 
diff.seconds/60 

这个论坛使用time.mktime()