我正在尝试查找存储我的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。有帮助吗?
答案 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}")