Как сгенерировать последовательность будущих дат и времени в Python и определить ближайшие даты и времени из множества

1

Мне нужно создать четыре объекта datetime в Python:

"The next instance of 5:30AM EST"
"The next instance of 8:30AM EST"
"The next instance of 1:00PM EST"
"The next instance of 5:30PM EST"

Затем мне нужно найти, какая из них ближе всего к текущей дате/времени.

Хотел бы я сказать, что у меня есть начальный код, но я не знаю, с чего начать.

Теги:
datetime
sequence

2 ответа

1
Лучший ответ

Это должно заставить вас начать. У меня есть текущее время, которое передается в функцию как дата-время, поэтому, если аргумент находится в EST, это должно сработать.

def find_next(cur_dt):
    import datetime as dt
    t = [dt.time(5,30), dt.time(8,30), dt.time(13,0), dt.time(17,30)]

    cur_t = cur_dt.time()
    cur_d = cur_dt.date()

    for i in range(len(t)):
        if t[i] > cur_t:
            rt = [t[(j+i)%len(t)] for j in range(len(t))]
            rd = [cur_d] * (len(t)-i) + [cur_d + dt.timedelta(days=1)]*i
            return [dt.datetime.combine(rd[j],rt[j]) for j in range(len(rt))]

    # everything happens tomorrow        
    return [dt.datetime.combine(cur_d + dt.timedelta(days=1), i) for i in t]

Результатом будут объекты, в порядке, начиная с "скорейшего" и т.д.

  • 0
    Я никогда не видел, чтобы [t[(j+i)%len(t)] for j in range(len(t))] , но это происходит в старых уловках.
  • 0
    Потрясающие. Спасибо тебе за это.
0

Кажется, это может быть вопрос о домашнем задании. Достаточно ли кода примера, чтобы вы начали? Вероятно, это не МОСТ эффективный, но он будет работать.

from datetime import datetime, time, timedelta
now = datetime.now()
today = datetime.date(now)
tomorrow = today + timedelta(days=1)

time_a = time  (4, 0)
today_a = datetime.combine(today, time_a)
tomorrow_a = datetime.combine(tomorrow, time_a)
if (today_a - now)>timedelta(0):
    print "%s is in the future" % today_a 

if (tomorrow_a - now)>timedelta(0):
    print "%s is in the future" % tomorrow_a 

Для списка "t" вы можете использовать: t = [время (5,30), время (8,30), время (13,0), время (17,30)] now = datetime.now()

today = [x for x in t if datetime.combine(today, x) > now]
not_today = set(t) - set(today)
  • 0
    Не домашнее задание. Я уже давно не в школе ( linkedin.com/in/nicksergeant )
  • 0
    Их много в последнее время. Может быть, мой фильтр немного гиперчувствителен. ;). , , Хотя я бы не назвал 5 лет "долгим временем". ( linkedin.com/in/CarlFischerIV )
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню