Как я могу добавить все элементы вместе в массиве из времени - PullRequest
0 голосов
/ 05 июля 2019

У меня есть массив, заполненный строкой, представляющей элементы времени, и я пытаюсь получить общее время из этого массива.


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

Ответы [ 3 ]

2 голосов
/ 05 июля 2019

Использование модуля 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
1 голос
/ 05 июля 2019

Вот еще один способ:

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
0 голосов
/ 05 июля 2019

Если вы готовы использовать панд, результат становится намного проще, поскольку у панд есть много возможностей для анализа жала в более богатые объекты времени.

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')".

Если вы не хотите использовать панд, вы можете сделать небольшую вспомогательную функцию.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...