【发布时间】:2014-05-20 00:44:52
【问题描述】:
我想将我的字符串日期转换为 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'
我的代码有什么问题。
【问题讨论】:
我想将我的字符串日期转换为 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 - 以零填充十进制数表示的月份中的日期希望对您有所帮助。
【讨论】:
ValueError: unconverted data remains: T18:30:00.000Z 如何转换此字符串日期:2019-10-15T18:30:00.000Z?
在这种情况下使用 django 的 dateparse 可能会很方便。
from django.utils.dateparse import parse_date
date_str = request.POST.get('date')
date = parse_date(date_str)
【讨论】:
parse_date 无法正常工作,如果日期不是%Y-%m-%d 格式,则返回None。
parse_datetime 为我工作。
如果给定日期不是%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
【讨论】:
DATE_INPUT_FORMATS 包含这两种格式,它就会出错。我认为你不应该同时使用这两种格式。
在这种情况下使用 Django 的 dateparse 的 parse_datetime 可能会很方便。如果是动态的,则不必显式应用数据时间格式。
from django.utils.dateparse import parse_datetime
date = parse_datetime(datetime_str)
【讨论】: