Получите интервалы между двумя временами - PullRequest
0 голосов
/ 18 ноября 2009

Пользователь будет указывать время interval из n сек / мин / час, а затем два раза (start / stop).

Мне нужно иметь возможность взять это interval, а затем пройти через start и stop раз, чтобы получить список этих времен. Затем после этого я выполню поиск в базе данных через table.objects.filter, чтобы извлечь данные, соответствующие каждому разу.

В данный момент я делаю несколько смехотворно долгих алгоритмов, и я уверен, что мог бы быть более простой способ сделать это. То есть более 1014 * питонский путь. Мысли?

Ответы [ 3 ]

4 голосов
/ 18 ноября 2009

он прекрасно подходит и как генератор:

def timeseq(start,stop,interval):
    while start <= stop:
        yield start
        start += interval

используется как:

for t in timeseq(start,stop,interval):
    table.objects.filter(t)

или

data = [table.objects.filter(t) for t in timeseq(start,stop,interval)]
4 голосов
/ 18 ноября 2009

Вы ищете что-то подобное? (псевдокод)

t = start 
while t != stop: 
    t += interval 
    table.objects.filter(t) 
1 голос
/ 18 ноября 2009

А как же ...

result = RelevantModel.objects.filter(relavant_field__in=[
    start + interval * i 
    for i in xrange((start - end).seconds / interval.seconds)
]) 

...?

Я не могу представить, что это сильно отличается от того, что вы уже делаете, но, возможно, оно более компактно (особенно, если вы не используете foo__in=[bar] или понимание списка). Конечно, начало и конец будут объектами datetime.datetime, а интервал будет объектом datetime.timedelta.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...