Формат строки в формате Django
Я хочу преобразовать дату строки в формат даты django. Я попробовал метод. но не работает.
date = datetime.datetime.strptime(request.POST.get('date'),"Y-mm-dd").date()
Я получил эту ошибку.
time data '2014-04-07' does not match format 'Y-mm-dd'
что неправильно в моем коде.
Ответы
Ответ 1
Это должно быть %Y-%m-%d
:
>>> s = "2014-04-07"
>>> datetime.datetime.strptime(s, "%Y-%m-%d").date()
datetime.date(2014, 4, 7)
Согласно документации:
-
%Y
означает год со столетием как десятичное число -
%m
- месяц как десятичное число с нулевым запасом -
%d
- день месяца в виде десятичного числа с нулевым запасом
Надеюсь, это поможет.
Ответ 2
В этом случае было бы удобно использовать django dateparse.
from django.utils.dateparse import parse_date
date_str = request.POST.get('date')
date = parse_date(date_str)
Ответ 3
Функция django.utils.dateparse.parse_date
вернет None
если заданная дата не в %Y-%m-%d
format
Я не нашел функцию в исходном коде django для синтаксического анализа строки DATE_INPUT_FORMATS
. Поэтому я написал для этого специальную вспомогательную функцию, и я добавил сюда для помощи другим.
from datetime import datetime
from django.utils.formats import get_format
def parse_date(date_str):
"""Parse date from string by DATE_INPUT_FORMATS of current language"""
for item in get_format('DATE_INPUT_FORMATS'):
try:
return datetime.strptime(date_str, item).date()
except (ValueError, TypeError):
continue
return None
Ответ 4
from dateutil import parser
date_string = '2016-04-07 23:00:00'
date_object = parser.parse(date_string)