Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 27, 2010 09:45:19

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с датой

Здравствуйте!

Мне нужно вытащить из БД данные которые были записаны 5 или более дней назад.
Как правильно узнать дату, которая была 5 дней назад ?

Пробовал так, но не работает:

n = time.time() - (60*60*24*5)
date = n.strftime("%Y-%m-%d %H:%M:%S")
print date



Офлайн

#2 Ноя. 27, 2010 11:09:12

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Операции с датой

from datetime import datetime, timedelta

'Сдвинуть время'
print d + timedelta(days=1, hours=1)
#> 2010-08-15 03:58:15.057538
ещё см сюда

Офлайн

#3 Ноя. 27, 2010 12:07:54

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с датой

Спасибо то что нужно !

И ещё небольшой вопрос:

cursor.execute('''SELECT * FROM files''')
for f in cursor.fetchall():
td = (datetime.today() - timedelta(days=f['interval'])).strftime("%Y-%m-%d %H:%M:%S")
if td >= f['date']:# как правильно перевести строку f['date'] в формат даты для сравнения ?
print f['name']



Отредактировано (Ноя. 27, 2010 12:08:51)

Офлайн

#4 Ноя. 27, 2010 12:26:28

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Операции с датой

andreiru
Спасибо то что нужно !

И ещё небольшой вопрос:
cursor.execute('''SELECT * FROM files''')
for f in cursor.fetchall():
td = (datetime.today() - timedelta(days=f['interval'])).strftime("%Y-%m-%d %H:%M:%S")
if td >= f['date']:# как правильно перевести строку f['date'] в формат даты для сравнения ?
print f['name']
фильтровать нужно в запросе, что-то типа этого:
td = (datetime.today() - timedelta(days=5))
cursor.execute('''SELECT * FROM files where ?>date''',td)
for f in cursor.fetchall():
print f['name']
поле “data” в базе должна быть с типом даты

а так как поле interval храниться в базе, то там же нужно хранить посчитанное поле date2 = date + interval, и в запросе сравнивать текущий день с date2

Отредактировано (Ноя. 27, 2010 12:29:41)

Офлайн

#5 Ноя. 27, 2010 12:50:02

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Операции с датой

На мой взгляд достаточно полное описание форматов времени приведено на сайте:
http://seehuhn.de/pages/pdate



Отредактировано (Ноя. 27, 2010 12:52:03)

Офлайн

#6 Ноя. 27, 2010 13:04:31

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции с датой

Эм, вот так работает:

cursor.execute('''SELECT * FROM files''')
for f in cursor.fetchall():
td = (datetime.today() - timedelta(days=f['interval']))
if td >= datetime.strptime(str(f['date']), "%Y-%m-%d %H:%M:%S")
print f['name']
Так правильно будет ?



Отредактировано (Ноя. 27, 2010 13:05:02)

Офлайн

#7 Ноя. 27, 2010 13:39:56

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Операции с датой

andreiru
Так правильно будет ?
если работает, то правильно. но алгоритм плохой - то же самое что читать из текстового файла, а не из бд-sql.
тот что я предложил будет в сотню раз быстрее работать (зависит от бд)

Отредактировано (Ноя. 27, 2010 13:41:04)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version