如何找到日期时间的平均时间?

时间:2019-07-23 16:29:59

标签: python datetime average

我正在尝试查找存储我的datetime次的列表的平均值。

我尝试获取列表的总和,但由于它是datetime模块,因此不起作用。

finaltimes = []
for i in range(len(times)):
    try:
        a = times[i]
        b = prior_times[i]

        da = datetime.datetime.strptime(a, '%H:%M:%S')
        db = datetime.datetime.strptime(b, '%H:%M:%S')

        print(db - da)
        finaltimes.append(db - da)

我期望输出为00:01:34。有帮助吗?

3 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是将datetime个对象转换为utc,然后将它们平均化,将最终的utc转换成datetime对象,就像这样- >

import datetime
datetime.datetime.fromtimestamp((datetime.datetime(2012,4,1,0,0).timestamp() + datetime.datetime(2013,4,1,0,0).timestamp()) / 2 )
# OP datetime.datetime(2012, 9, 30, 11, 0)

答案 1 :(得分:0)

您可以使用它。为了简洁起见,我仅从datetime导入了datetime。仅在时间上使用datetime.strptime时,它将返回1970年1月1日的日期。datetime方法比time方法丰富得多,因此完成了输入和算术运算与datetime在这里。您可以只使用strftime输出不带日期的时间,因此它们在整个过程中都会被忽略。 (注意:在Windows中,timestamp方法在1970年1月1日将不起作用,因此我添加了一个hack来将日期强制为1月2日。只要两次都执行,就可以了。) >

from datetime import datetime
finaltimes = []
for i in range(len(times)):
    try:
        a = times[i]
        b = prior_times[i]

        da = datetime.strptime(a, '%H:%M:%S').replace(day=2)
        db = datetime.strptime(b, '%H:%M:%S').replace(day=2)

        ft = datetime.fromtimestamp((da.timestamp() + db.timestamp()) / 2)

        print(ft)
        finaltimes.append(ft)

以下是使用示例时间的核心代码,以交互方式运行,并且输入已经完成。

>>> ft = datetime.fromtimestamp((da.timestamp() + db.timestamp()) / 2)
>>> print(ft)
2019-07-23 00:02:52.500000
>>> print(ft.strftime("%H:%M:%S.%f"))
00:02:52.500000
>>> print(ft.strftime("%H:%M:%S.%f")[:11])
00:02:52.50

答案 2 :(得分:0)

另一种方法如下。这次,如果您只有HH:MM:SS格式,则可以对转换为秒的字符串使用算术运算。此示例中的最后一次是字符串。您可以根据需要将它们转换为其他内容,例如日期时间或时间对象。或仅将其保留为秒数'ts,等等。

from operator import mul
finaltimes = []
for i in range(len(times)):
    a = times[i]
    b = prior_times[i]

    as = sum(map(operator.mul, (int(x) for x in a.split(":")), (3600, 60, 1)))
    bs = sum(map(operator.mul, (int(x) for x in b.split(":")), (3600, 60, 1)))
    ts = (as + b2) / 2

    finaltimes.append(f"{ts // 3600:02d}:{(ts % 3600) // 60:02d}:{ts % 60:02d}")