Найти - Пользователи
Полная версия: сравнение таймстампов
Начало » Python для новичков » сравнение таймстампов
1
Enchantner
Довольно тривиальная задача - есть набор таймстампов (time.time(), округленный до секунд) в виде строк (вида ‘1262865767’), нужно найти в них тот, который был сделан последним, ну и также уметь извлекать по конкретному таймстампу нужный материал. Вроде бы для сравнения предназначен datetime.timedelta, однако он работает как-то странно, даже datetime.fromtimestamp() в качестве аргумента не принимает. Как сделать?
pasaranax
Что за странный вопрос. Какой таймстамп имеет наибольшее значение - тот и сделан последним :)
А по поводу модуля datetime - лично меня он откровенно бесит своей неочевидностью. Имхо, хватает модуля time и для определения времени и для работы с произвольными форматами.
Enchantner
pasaranax
не, ну оно понятно, что какой больше :) Просто мне нужно, скажем, определить все таймстампы за определенный промежуток времени, заданный начальными и конечными днями, месяцами и годами. Как? Прямо хоть SQLite прикручивать и делать все запросами)
expee
Можешь преобразовать с помощью функции time.gmtime время в секундах в структуру:
>>> t = time.time()
>>> s = time.gmtime(t)
>>> print s.tm_year
2010
И затем отбирать нужное. Насчет timedelta - он принимает дни, часы, минуты, года, недели, секунды и даже миллисекунды. Так что тот-же результат time.time() ему отлично передается, но нужно указывать, что ты передаешь. (с секундами - datetime.timedelta(seconds=time.time())
Enchantner
Вообще походу можно просто сравнивать datetime'ы, вроде все работает нормально :)
pasaranax
Вот я наваял, насколько я понял что тебе нужно
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)
ZZZ
pasaranax
А по поводу модуля datetime - лично меня он откровенно бесит своей неочевидностью.
Хм… А я один раз разобрался и всё время пользую. Никаких проблем.

Enchantner
Прямо хоть SQLite прикручивать и делать все запросами)
SQLite не умеет timestamp. Я, например, сохраняю дату-время в строке в ISO-формате. Выборка замечательно работает.

expee
Можешь преобразовать с помощью функции time.gmtime время в секундах в структуру
Зачем? :-) И timedelta в этой задаче не нужен.

Просто преобразуй эпоховое время в datetime и сравнивай:
>>> 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)
>>>
Совершенно не вижу тут проблем и неоднозначностей.

Добавленно:
Пока я писал, же всё решили…
Enchantner
Хм, спасибо, буду разбираться. А какая вообще есть разница между UTC и не-UTC таймстампом? И как делать именно UTC?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB