Попытка найти дату окончания, заданную дату начала, время начала и время окончания - PullRequest
0 голосов
/ 25 марта 2019

При использовании окон обслуживания из файла с разделителями в этой форме:

X'th day of month | start time (hh:mm AM/PM) | end time (hh:mm AM/PM)

Мне нужно учесть случай, когда окно обслуживания выходит за границы дня (т. Е. После полуночи).

Для этого я думал создать timedelta между временем начала и окончания, а затем добавить его к объекту datetime, представляющему дату и время начала, чтобы Python мог отсортировать, если дата изменилась.

Я пришел к такому выводу:

fmt_frame   = '{0}:{1}:{2}'
#             12H:MM:SS AM/PM
fmt         = '%I:%M:%S %p'

maint_interval = datetime.strptime(fmt_frame.format(*maint_t_end_fields), fmt) - \
                 datetime.strptime(fmt_frame.format(*maint_t_start_fields), fmt)

logger.debug('Interval in seconds: {0}'.format(maint_interval.seconds))

maint_dt_start  = datetime.combine(maint_day,
                  datetime.strptime(fmt_frame.format(*maint_t_start_fields), fmt).time())

maint_dt_end    = maint_dt_start + timedelta(seconds=maint_interval.seconds)

maint_timing[fields[0]] = (maint_day,
                           maint_dt_start,
                           maint_dt_end)

Мое обоснование для создания второй временной дельты только из атрибута seconds первого состояло в том, чтобы просто оставить после себя атрибут -1 days, который получается путем вычитания, например, 2:00 из 20:00. * 10101 *

Мне не хватает более простого способа сделать это, учитывая дату и время начала и время окончания без явной даты?

С другой стороны, я полагаю, что я мог бы проверить часть дат AM / PM и сделать что-то вроде if maint_t_start_fields[-1][-2:]=='PM' and maint_t_end_fields[-1][-2:] =='AM': #add a day to the result datetime object, но тогда я зависел бы от того, чтобы мои входные данные оставались в том же формате.

...