При использовании окон обслуживания из файла с разделителями в этой форме:
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
, но тогда я зависел бы от того, чтобы мои входные данные оставались в том же формате.