【问题标题】:how can i add all the elements together in an array made of time如何将所有元素添加到由时间组成的数组中
【发布时间】:2019-07-05 22:16:34
【问题描述】:

我有一个用字符串填充的数组,代表时间元素,我试图从这个数组中获取总时间。


testArray=['02:30:57','15:09:18','01:00:18']
def arraysum(x): 
  if (len(x)%2==0):

     for i in range (0,len(x)-1,2):
            for j in range (1,len(x),2) :
                time2=datetime.strptime(x[i],"%H:%M:%S")
                time1=datetime.strptime(x[j],"%H:%M:%S")
                time1delta=timedelta(hours=time1.hour, minutes=time1.minute, seconds=time1.second)
                time2delta=timedelta(hours=time2.hour, minutes=time2.minute, seconds=time2.second)
                total=time2delta+time1delta
                print (total)


    else:
        for i in range (0,len(x),2):
            for j in range (1,len(x)-1,2) :
                time2=datetime.strptime(x[i],"%H:%M:%S")
                time1=datetime.strptime(x[j],"%H:%M:%S")
                time1delta=timedelta(hours=time1.hour, minutes=time1.minute, seconds=time1.second)
                time2delta=timedelta(hours=time2.hour, minutes=time2.minute, seconds=time2.second)
                total=time2delta+time1delta
                print (total)


arraysum(testArray)

这是我得到的不正确的输出。 17:40:15 16:09:36

我需要它显示 18:40:15

【问题讨论】:

标签: python time sum


【解决方案1】:

使用datetime 模块。使用datetime.timedelta 增加时间。

例如:

import datetime

testArray=['02:30:57','15:09:18','01:00:18'] 
result = None
for d in testArray:
    if not result:
        result = datetime.datetime.strptime(d, "%H:%M:%S")
    else:
        value = datetime.datetime.strptime(d, "%H:%M:%S")
        result = result + datetime.timedelta(hours=value.hour, minutes=value.minute, seconds=value.second)

print(result.strftime("%H:%M:%S")) #-->18:40:33

【讨论】:

  • 它自己工作,但是当我把它放在一个函数中时它会返回 03:30:57。
【解决方案2】:

这是另一种方式:

from datetime import timedelta


def f(t):
    result = timedelta()
    for i in t:
        hours, minutes, seconds = i.split(":")
        result += timedelta(
            hours=int(hours), minutes=int(minutes), seconds=int(seconds)
        )
    return result


test = ['02:30:57','15:09:18', '01:00:18']
print(f(test))
# result = 18:40:33

【讨论】:

    【解决方案3】:

    如果您愿意使用 pandas,结果会变得容易得多,因为 pandas 具有很多将字符串解析为更丰富的时间对象的功能。

    import pandas as pd
    
    testArray=['02:30:57','15:09:18','01:00:18']
    total_time = sum((pd.Timedelta(t) for t in testArray), pd.Timedelta(0, 's'))
    

    要打印,您有多种选择。 str(total_time) 返回'0 days 18:40:33'total_time.isoformat() 返回'P0DT18H40M33S'repr(total_time) 返回"Timedelta('0 days 18:40:33')"

    如果不想用pandas,可以做个小辅助函数。

    import datetime
    
    testArray=['02:30:57','15:09:18','01:00:18']
    
    def parse_timedelta_string(timedelta_string):
        hours, minutes, seconds = map(int, timedelta_string.split(':'))
        return datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
    
    total_time = sum((parse_timedelta_string(t) for t in testArray), datetime.timedelta(seconds=0))
    
    print(total_time)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多