Форум сайта python.su
Довольно тривиальная задача - есть набор таймстампов (time.time(), округленный до секунд) в виде строк (вида ‘1262865767’), нужно найти в них тот, который был сделан последним, ну и также уметь извлекать по конкретному таймстампу нужный материал. Вроде бы для сравнения предназначен datetime.timedelta, однако он работает как-то странно, даже datetime.fromtimestamp() в качестве аргумента не принимает. Как сделать?
Офлайн
Что за странный вопрос. Какой таймстамп имеет наибольшее значение - тот и сделан последним :)
А по поводу модуля datetime - лично меня он откровенно бесит своей неочевидностью. Имхо, хватает модуля time и для определения времени и для работы с произвольными форматами.
Офлайн
pasaranax
не, ну оно понятно, что какой больше :) Просто мне нужно, скажем, определить все таймстампы за определенный промежуток времени, заданный начальными и конечными днями, месяцами и годами. Как? Прямо хоть SQLite прикручивать и делать все запросами)
Отредактировано (Янв. 7, 2010 15:58:31)
Офлайн
Можешь преобразовать с помощью функции time.gmtime время в секундах в структуру:
>>> t = time.time()
>>> s = time.gmtime(t)
>>> print s.tm_year
2010
Отредактировано (Янв. 7, 2010 16:15:59)
Офлайн
Вообще походу можно просто сравнивать datetime'ы, вроде все работает нормально :)
Офлайн
Вот я наваял, насколько я понял что тебе нужно
import time, random
# вот для примера 50 таймстампов разбросанных по всей юникс эпохе
timestamps = [random.randint(0, int(time.time())) for i in xrange(50)]
# выберем из них все за время с 01.01.2000 по 01.01.2010
start = time.strptime("01.01.2000", "%d.%m.%Y")
stop = time.strptime("01.01.2010", "%d.%m.%Y")
mystamps = filter(lambda s: start < time.gmtime(s) < stop, timestamps)
Офлайн
pasaranaxХм… А я один раз разобрался и всё время пользую. Никаких проблем.
А по поводу модуля datetime - лично меня он откровенно бесит своей неочевидностью.
EnchantnerSQLite не умеет timestamp. Я, например, сохраняю дату-время в строке в ISO-формате. Выборка замечательно работает.
Прямо хоть SQLite прикручивать и делать все запросами)
expeeЗачем? :-) И timedelta в этой задаче не нужен.
Можешь преобразовать с помощью функции time.gmtime время в секундах в структуру
>>> import datetime as dt
>>> import random
>>> l = range(1, 60)
>>> random.shuffle(l)
>>> max([dt.datetime.fromtimestamp(i) for i in l])
datetime.datetime(1970, 1, 1, 3, 0, 59)
>>> min([dt.datetime.fromtimestamp(i) for i in l])
datetime.datetime(1970, 1, 1, 3, 0, 1)
>>>
Отредактировано (Янв. 7, 2010 16:46:26)
Офлайн
Хм, спасибо, буду разбираться. А какая вообще есть разница между UTC и не-UTC таймстампом? И как делать именно UTC?
Офлайн