Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 7, 2010 15:13:44

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

сравнение таймстампов

Довольно тривиальная задача - есть набор таймстампов (time.time(), округленный до секунд) в виде строк (вида ‘1262865767’), нужно найти в них тот, который был сделан последним, ну и также уметь извлекать по конкретному таймстампу нужный материал. Вроде бы для сравнения предназначен datetime.timedelta, однако он работает как-то странно, даже datetime.fromtimestamp() в качестве аргумента не принимает. Как сделать?



Офлайн

#2 Янв. 7, 2010 15:45:25

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

сравнение таймстампов

Что за странный вопрос. Какой таймстамп имеет наибольшее значение - тот и сделан последним :)
А по поводу модуля datetime - лично меня он откровенно бесит своей неочевидностью. Имхо, хватает модуля time и для определения времени и для работы с произвольными форматами.



Офлайн

#3 Янв. 7, 2010 15:58:04

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

сравнение таймстампов

pasaranax
не, ну оно понятно, что какой больше :) Просто мне нужно, скажем, определить все таймстампы за определенный промежуток времени, заданный начальными и конечными днями, месяцами и годами. Как? Прямо хоть SQLite прикручивать и делать все запросами)



Отредактировано (Янв. 7, 2010 15:58:31)

Офлайн

#4 Янв. 7, 2010 16:15:24

expee
От:
Зарегистрирован: 2009-12-21
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

сравнение таймстампов

Можешь преобразовать с помощью функции time.gmtime время в секундах в структуру:

>>> t = time.time()
>>> s = time.gmtime(t)
>>> print s.tm_year
2010
И затем отбирать нужное. Насчет timedelta - он принимает дни, часы, минуты, года, недели, секунды и даже миллисекунды. Так что тот-же результат time.time() ему отлично передается, но нужно указывать, что ты передаешь. (с секундами - datetime.timedelta(seconds=time.time())



Отредактировано (Янв. 7, 2010 16:15:59)

Офлайн

#5 Янв. 7, 2010 16:32:09

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

сравнение таймстампов

Вообще походу можно просто сравнивать datetime'ы, вроде все работает нормально :)



Офлайн

#6 Янв. 7, 2010 16:38:18

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

сравнение таймстампов

Вот я наваял, насколько я понял что тебе нужно

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)



Офлайн

#7 Янв. 7, 2010 16:44:17

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

сравнение таймстампов

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

Добавленно:
Пока я писал, же всё решили…



Отредактировано (Янв. 7, 2010 16:46:26)

Офлайн

#8 Янв. 7, 2010 16:54:07

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

сравнение таймстампов

Хм, спасибо, буду разбираться. А какая вообще есть разница между UTC и не-UTC таймстампом? И как делать именно UTC?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version