Найти - Пользователи
Полная версия: Из строки в datetime
Начало » Django » Из строки в datetime
1 2
andreiru
Здравствуйте!

Мне нужно из строки 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()

просто интересно можно ли короче сделать ?)
fashust
datetime.fromtimestamp(mktime(strptime('2012-12-21', '%Y.%m.%d')))
d1ffuz0r
from datetime import datetime
datetime.strptime('2012-12-21', '%Y-%m-%d')
andreiru
Спасибо всем !

Делаю афишу, нужно выводить события исходя из даты

    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
    )

выдаёт Incorrect datetime value: ‘2012-09-27 00:00:00%’ for column ‘date_start’ at row 1

видимо это из-за того что в date у нас и дата и время 2012-09-28 00:00:00, подскажите как получить только дату 2012-09-28 использовать .strftime('%Y-%m-%d') ?




FishHook
andreiru
date_start__startswith=date

Не очень понял эту конструкцию, разве она может применяться к дате?
andreiru
FishHook я здесь вычитал
FishHook
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!

andreiru
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 # дата окончания должна быть больше текущей даты
        )

Сделал так, работает, скажите пожалуйста всё правильно делаю ?
FishHook
Слишком много кода, для такой простой вьюхи,

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)

А зачем тебе этот __startswiths в дате я так и не понял.
ПС. Не стоит обзывать переменные зарезервированными словами, типа type, list, dict и прочими
andreiru
FishHook, спасибо буду придерживаться вашему примеру!

Про get_or_404 первый раз слышу, мне выдаёт ошибку:
'Manager' object has no attribute 'get_or_404'

нашёл такой пример, выдаёт:
cannot import name get_or_404

get_or_404 через декоратор работает ?




А зачем тебе этот __startswiths в дате я так и не понял.

в вашей выборке :
events=Event.objects.filter(date_start__lt=date, date_end__gt=now)

будут события которые начались ранее (date_start__lt=date) и закончуться позднее (date_end__gt=now) текущей даты

а нужны события которые начнуться сегодня (date_start__startswith=date.date()) или ранее (date_start__lt=date) и закончаться позднее текущего времени (if date.date() == date_today.date(): date = date_today, date_end__gt=date)
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