Python Django字符串到日期格式

Python Django字符串到日期格式,python,django,datetime,Python,Django,Datetime,我想将字符串日期转换为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" >>> date

我想将字符串日期转换为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)
from django.utils.dateparse import parse_datetime
date = parse_datetime(datetime_str)

django.utils.dateparse.parse_date
函数将返回
None
如果给定日期不是
%Y-%m-%d
格式

我在django源代码中还没有找到一个函数,可以通过
DATE\u INPUT\u格式
解析字符串。所以我为它写了一个自定义的helper函数 我已经添加到这里来帮助其他人

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_date
date_str = request.POST.get('date')
date = parse_date(date_str)
from django.utils.dateparse import parse_datetime
date = parse_datetime(datetime_str)

parse_date
未按规定工作,如果日期未采用
%Y-%m-%d
格式,则返回
None
。如其他注释所述,
parse_datetime
对我有效。太棒了!如果有几个不同的格式,答案是极好的!某些字符串可能被多种格式错误接受。04-07-2021或07-04-2021?@PedroLacerda是的,如果您的
DATE\u INPUT\u格式
同时包含这两种格式,则会出现问题。我认为您不应该同时使用这两种格式。我有一个带有时区的字符串日期,这在转换时给了我一个错误:
ValueError:未转换的数据仍然存在:T18:30:00.000Z
我如何转换这个字符串日期:
2019-10-15T18:30:00.000Z
?@saran3h您可以使用django.utils.dateparse.parse_datetime进行转换。请在此处查看Melvyn的答案: