Добавление продолжительности времени в Python - PullRequest
2 голосов
/ 09 марта 2010

Я хотел бы добавить серию расколов в Python. Времена начинаются как строки типа «00: 08: 30.291». Я не могу найти правильный способ использования объектов Python или API, чтобы сделать это удобным / элегантным. Кажется, что объект time не использует микросекунды, поэтому я использую strptime datetime для успешного анализа строк. Но тогда кажется, что даты не добавляются, и я действительно предпочитаю не переполнять дни (то есть 23 + 2 часа = 25 часов). Я могу использовать datetime.time, но они тоже не добавляют. Timedeltas показалось бы уместным, но, кажется, немного неловко переходить из / в другие вещи. Возможно, я упускаю что-то очевидное здесь. Я хотел бы иметь возможность:

for timestring in times:
    t = datetime.strptime("%H:%M:%S.%f", timestring).time
    total_duration = total_duration + t
print total_duration.strftime("%H:%M:%S.%f")

1 Ответ

10 голосов
/ 09 марта 2010

Вы работаете с разницей во времени, поэтому использование datetime.timedelta подходит только здесь:

>>> import datetime
>>> d1 = datetime.datetime.strptime("00:08:30.291", "%H:%M:%S.%f")
>>> d1
datetime.datetime(1900, 1, 1, 0, 8, 30, 291000)
>>> d2
datetime.datetime(1900, 1, 1, 0, 2, 30, 291000)
>>> dt1 = datetime.timedelta(minutes=d1.minute, seconds=d1.second, microseconds=d1.microsecond)
>>> dt2 = datetime.timedelta(minutes=d2.minute, seconds=d2.second, microseconds=d2.microsecond)
>>> fin = dt1 + dt2
>>> fin
datetime.timedelta(0, 660, 582000)
>>> str(fin)
'0:11:00.582000'

Также, пожалуйста, не используйте такие имена как sum для ваших переменных, вы встроены в теневое копирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...