Преобразование строки временного интервала во время в python

avatar
Alexis
9 августа 2021 в 02:54
228
1
0

У меня есть следующий список строк:

my_list = ['10:00AM-12:00PM','12:30PM-03:00PM']

И я хочу преобразовать эти строки во временной интервал (разница во времени в формате чч:мм), в данном случае:

intervals = [02:00,01:30]

Я пробовал это:

import time

le_vals = []
for i, val in enumerate(intervals):
   le_vals.append(val.replace('-', ' ').split(' '))

the_diff = []
for i, val in enumerate(le_vals):
   the_diff.append((time.strptime(val[1], '%I:%M%p') - time.strptime(val[0], '%I:%M%p'))

Но я застрял на том, как в последней части получить различия в списке the_diff. Поскольку меня попросили задать краткий вопрос, я продвигаю свою логику, но, пожалуйста, не могли бы вы мне помочь?

Источник

Ответы (1)

avatar
SorousH Bakhtiary
9 августа 2021 в 03:41
4

Вы проделали хорошую работу, но элементы в списке intervals недействительны в python! (вам нужны строки?) Почему бы вам не сохранить их как объект timedelta?

from datetime import datetime

my_list = ['10:00AM-12:00PM', '12:30PM-03:00PM']

res = []
for item in my_list:
    d1, d2 = item.split('-')

    d1 = datetime.strptime(d1, '%I:%M%p')
    d2 = datetime.strptime(d2, '%I:%M%p')
    res.append(d2 - d1)

print(res)

вывод:

[datetime.timedelta(seconds=7200), datetime.timedelta(seconds=9000)]

Когда вы вычитаете два объекта datetime друг из друга, создается объект timedelta со свойствами days и seconds:

for i in res:
    print(i.days, i.seconds)

вывод:

0 7200
0 9000

Если вам нужно это строковое представление, используйте либо str() для объекта timedelta (он также показывает секунды, но без нулевого заполнения часов):

res = []
for item in my_list:
    d1, d2 = item.split('-')

    d1 = datetime.strptime(d1, '%I:%M%p')
    d2 = datetime.strptime(d2, '%I:%M%p')
    res.append(str(d2 - d1))  # <--------------- Here

print(res)

вывод:

['2:00:00', '2:30:00']

Или соберите его самостоятельно, чтобы получить точный желаемый результат. Вот полный код:

из даты импорта даты и времени

my_list = ['10:00AM-12:00PM', '12:30PM-03:00PM']

res = []
for item in my_list:
    d1, d2 = item.split('-')

    d1 = datetime.strptime(d1, '%I:%M%p')
    d2 = datetime.strptime(d2, '%I:%M%p')
    delta = d2 - d1

    m, s = divmod(delta.seconds, 60)
    h, m = divmod(m, 60)

    res.append(f'{h:02}:{m:02}')

print(res)

выход:

['02:00', '02:30']
Alexis
9 августа 2021 в 03:59
1

Большое спасибо @SorousH Bakhtiary, я ценю ваше время и ответ, я многому научился благодаря вашему подходу! знаете, я боролся против получения разницы для каждого кортежа в списке, но ваше решение было ясным и практичным! Хорошего, отличного дня!

SorousH Bakhtiary
9 августа 2021 в 04:19
1

@Alexis Отлично, рад помочь :)