Форум сайта python.su
0
Здравствуйте!
Мне нужно из строки 2012-12-21 преобразовать в datetime формат
сделал так:
date = request.GET.get('date') if date: dt_y, dt_m, dt_d = [int(d) for d in date.split('-')] date = datetime.date(dt_y, dt_m, dt_d) else: date = datetime.date.today()
Отредактировано andreiru (Сен. 27, 2012 09:21:21)
Офлайн
3
datetime.fromtimestamp(mktime(strptime('2012-12-21', '%Y.%m.%d')))import this
Офлайн
5
from datetime import datetime datetime.strptime('2012-12-21', '%Y-%m-%d')
Отредактировано d1ffuz0r (Сен. 27, 2012 11:23:37)
Офлайн
0
Спасибо всем !
Делаю афишу, нужно выводить события исходя из даты
try: date = datetime.datetime.strptime(request.GET.get('date'), '%Y-%m-%d') except TypeError: date = None if date: events = events.filter( Q(date_start__startswith=date) | Q(date_start__lt=date), date_end__gte=date )
Офлайн
568
andreiru
date_start__startswith=date
Офлайн
0
FishHook я здесь вычитал
Офлайн
568
andreiru
FishHook я здесь вычитал
0
down vote
Here is an interesting technique– I leveraged the startswith procedure as implemented with Django on MySQL to achieve the result of only looking up a datetime through only the date. Basically, when Django does the lookup in the database it has to do a string conversion for the DATETIME MySQL storage object, so you can filter on that, leaving out the timestamp portion of the date– that way %LIKE% matches only the date object and you'll get every timestamp for the given date.
datetime_filter = datetime(2009, 8, 22)
MyObject.objects.filter(datetime_attr__startswith=datetime_filter.date())
This will perform the following query:
SELECT (values) FROM myapp_my_object \
WHERE myapp_my_object.datetime_attr LIKE BINARY 2009-08-22%
The LIKE BINARY in this case will match everything for the date, no matter the timestamp. Including values like:
+———————+
| datetime_attr |
+———————+
| 2009-08-22 11:05:08 |
+———————+
Hopefully this helps everyone until Django comes out with a solution!
Офлайн
0
def events(request, type=None): date_today = datetime.datetime.now() # получаю тип if type: try: type = Type.objects.get(uid=type) except Event.DoesNotExist: raise Http404() # полчаю дату try: date = datetime.datetime.strptime(request.GET.get('date'), '%Y-%m-%d') except TypeError: date = None #events events = Event.objects.all() # если есть тип сортирую по нему if type: events = events.filter(type=type) if date: # если дата запроса равна сегоднишнему дню то, # то присваиваю дате запроса время которое сейчас, чтобы убрать события которые уже закончились сегодня if date.date() == date_today.date(): date = date_today events = events.filter( Q(date_start__startswith=date.date()) | Q(date_start__lt=date),# выбераю события которые начнуться сегодня или начались ранее date_end__gt=date # дата окончания должна быть больше текущей даты )
Отредактировано andreiru (Сен. 29, 2012 04:38:47)
Офлайн
568
Слишком много кода, для такой простой вьюхи,
def events(request, t=None): _type=Type.objects.get_or_404(uid=t) now=datetime.datetime.now() date = datetime.datetime.strptime(request.GET.get('date', now), '%Y-%m-%d') events=Event.objects.filter(date_start__lt=date, date_end__gt=now)
Офлайн
0
FishHook, спасибо буду придерживаться вашему примеру!
Про get_or_404 первый раз слышу, мне выдаёт ошибку:
'Manager' object has no attribute 'get_or_404'
cannot import name get_or_404
А зачем тебе этот __startswiths в дате я так и не понял.
events=Event.objects.filter(date_start__lt=date, date_end__gt=now)
Отредактировано andreiru (Сен. 30, 2012 15:32:14)
Офлайн