Как сгенерировать последовательность будущих дат и времени в Python и определить ближайшие даты и времени из множества - PullRequest
1 голос
/ 07 сентября 2011

Мне нужно сгенерировать четыре объекта 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"

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

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

Ответы [ 2 ]

1 голос
/ 07 сентября 2011

Это должно помочь вам начать.У меня есть текущее время, передаваемое в функцию как datetime, поэтому, если аргумент находится в 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 голосов
/ 07 сентября 2011

Похоже, это может быть домашнее задание. Достаточно ли этого примера кода, чтобы начать? Это, вероятно, не самый эффективный, но это будет работать.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...