如果给定日期不是
我想将字符串日期转换为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'
我的代码出了什么问题。
应该是%Y-%m-%d
:
>>> s = "2014-04-07"
>>> datetime.datetime.strptime(s, "%Y-%m-%d").date()
datetime.date(2014, 4, 7)
根据文件:
%Y
代表以世纪为十进制数的年份%m
-月作为零填充小数%d
—一个月中的某一天,用零填充小数
在这种情况下使用django的日期解析可能会很方便。
from django.utils.dateparse import parse_date
date_str = request.POST.get('date')
date = parse_date(date_str)
%Y-%m-%d
格式的,则django.utils.dateparse.parse_date
函数将返回None
我在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
在这种情况下,使用Django的日期解析的parse_datetime可能会很方便。如果数据时间格式是动态的,则不必显式地应用它。
from django.utils.dateparse import parse_datetime
date = parse_datetime(datetime_str)