【问题标题】:How to calculate average datetime timestamps in python3如何在python3中计算平均日期时间时间戳
【发布时间】:2020-08-24 19:56:18
【问题描述】:

我有一个代码,我有它的性能时间戳,我想测量在多台计算机上运行它所花费的平均时间,但我只是不知道如何在 python 中使用datetime 模块。

我的程序如下所示:

1)我的代码只是将日志写入文本文件,其中时间戳看起来像

t1=datetime.datetime.now()
...
t2=datetime.datetime.now()
stamp= t2-t1

stamp 变量只是写在log.txt 中,所以在日志文件中它看起来像0:07:23.160896,所以它看起来像%H:%M:%S.%f 格式。

2) 然后我运行第二个 python 脚本,它读取 log.txt 文件并将0:07:23.160896 值作为字符串读取。

问题是我不知道如何使用这个值,因为如果我将它作为日期时间导入,它还会附加虚构的年月日,这是我不想要的,我只是想要使用小时、分钟、秒和微秒来将它们相加或求平均值。

例如,我可以在 Libreoffice 中打开它并将 0:07:23.160896 添加到 0:00:48.065130,这将得到 0:08:11.226026,然后除以 2 将得到 0:04:05.613013,我就是不可能这样做在python中或者我不知道该怎么做。

我已经尝试了所有方法,但 datetime.datetime 和 datetime.timedelta 都不允许像这样简单地进行乘法和除法。如果我只是做一个y=datetime.datetime.strptime('0:07:23.160896','%H:%M:%S.%f'),它只会给出1900-01-01 00:07:23.160896,我不能像那样接受y*2,它不允许算术运算,另外,如果我将它转换成timedelta,它也会乘以年,太荒谬了。我只是想加减乘以时间。

请帮助我找到一种方法来做到这一点,而不仅仅是 2 个变量,甚至可能是一种计算整个时间戳列表平均值的方法,例如 average(['0:07:23.160896' , '0:00 :48.065130', '0:00:14.517086',...]) 方式。

我只是想要一种方法来计算许多时间戳的平均值并以相同的格式给出它的平均值,就像你可以在 Libreoffice 中选择一个列并使用 AVERAGE() 函数来给出平均时间戳一样在那一栏中。

【问题讨论】:

  • t2-t1 为您提供 timedelta 对象,而不是 datetime 对象。 timedelta 对象没有格式化方法,因此最好将秒数记录为浮点数。您可以使用 timedelta 对象的 total_second 方法检索它:(t2-t1).total_seconds()

标签: python-3.x datetime time timestamp libreoffice-calc


【解决方案1】:

正如您所做的那样,您首先使用 strptime 将字符串读入日期时间对象:t = datetime.datetime.strptime(single_time,'%H:%M:%S.%f')

之后,将日期字符串的时间部分转换为时间增量,以便您可以轻松计算时间:tdelta = datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second, microseconds=t.microsecond)

现在您可以使用 timedelta 对象轻松计算,并在计算结束时通过str(tdsum) 转换回字符串

import datetime

times = ['0:07:23.160896', '0:00:48.065130', '0:12:22.324251']

# convert times in iso-format into timedelta list
tsum = datetime.timedelta()
count = 0
for single_time in times:
    t = datetime.datetime.strptime(single_time,'%H:%M:%S.%f')
    tdelta = datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second, microseconds=t.microsecond)
    tsum = tsum + tdelta
    count = count + 1

taverage = tsum / count

average_time = str(taverage)
print(average_time)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2019-07-12
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多