当日期似乎没问题时,在Django中获取无效的日期格式

时间:2015-09-21 20:42:22

标签: django django-models django-forms

在我的Django程序中,我在尝试保存到数据库时抛出以下异常:



[u"'2015-09-17 00:00:00' value has an invalid date format. It must be in YYYY-MM-DD format."]




2015-09-17的日期看起来不错,但显然我错过了什么?

数据库字段的定义如下:



date = models.DateField(blank=True, null=True)




3 个答案:

答案 0 :(得分:2)

问题在于时间00:00:00 如果删除它,可能会有效。

答案 1 :(得分:2)

您收到的字符串包含有关日期和时间的信息。但是,用于在数据库中保存该信息的字段是导致错误的DateField

您需要将收到的日期时间对象的字符串表示形式转换为Python datetime.date对象。

这可以使用.strptime()来完成,here返回与传递给它的日期字符串相对应的datetime对象以及用于解析它的格式。然后,我们可以在其上调用.date()来获取日期对象。

In [1]: from datetime import datetime

In [2]: received_datetime_repr = '2015-09-17 00:00:00' # string representation of datetime object

In [3]: received_datetime = datetime.strptime(received_datetime_repr, '%Y-%m-%d %H:%M:%S') # convert to datetime object

In [4]: received_datetime
Out[4]: datetime.datetime(2015, 9, 17, 0, 0)

In [5]: my_date_obj = received_datetime.date() # convert to date object

In [6]: my_date_obj
Out[6]: datetime.date(2015, 9, 17) # required value

此处,my_date_obj是您要在db中保存的所需值。

答案 2 :(得分:1)

您正在尝试保存并解析日期和时间。这是无效的。

您可以使用DateTimeField而不是DateField,也可以编写自定义日期格式。请参阅:https://docs.djangoproject.com/en/1.8/ref/settings/#date-format但我会反对它 - localozations存在问题。

只需遵守日期格式而非日期时间格式。