Django字符串到日期格式

时间:2014-04-07 16:33:26

标签: 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'

我的代码中出了什么问题。

4 个答案:

答案 0 :(得分:33)

应为%Y-%m-%d

>>> s = "2014-04-07"
>>> datetime.datetime.strptime(s, "%Y-%m-%d").date()
datetime.date(2014, 4, 7)

根据documentation

  • %Y代表一年,世纪为十进制数
  • %m - 作为零填充十进制数字的月份
  • %d - 作为零填充十进制数的月中的某一天

希望有所帮助。

答案 1 :(得分:18)

在这种情况下使用django的dateparse可能会很方便。

from django.utils.dateparse import parse_date
date_str = request.POST.get('date')
date = parse_date(date_str)

答案 2 :(得分:5)

如果给定日期不是django.utils.dateparse.parse_date格式

None函数将返回%Y-%m-%d

我没有在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

答案 3 :(得分:1)

在这种情况下,使用 Django 的 dateparse 的 parse_datetime 可能会很方便。如果是动态的,则您不必明确应用数据时间格式。

from django.utils.dateparse import parse_datetime
date = parse_datetime(datetime_str)