当日期看起来没问题时在 Django 中获取无效的日期格式
Getting invalid date format in Django when date seems to look ok
在我的 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)
问题出在时间上,00:00:00。
如果删除它,可能会起作用。
您正在尝试保存和解析日期和时间。这是无效的。
您可以使用 DateTimeField 而不是 DateField 或编写自定义日期格式。看到这个:https://docs.djangoproject.com/en/1.8/ref/settings/#date-format 但我建议不要这样做 - 本地化存在问题。
只需遵循您的日期格式,而不是日期时间格式。
您收到的字符串包含有关日期和时间的信息。但是,您用来在数据库中保存该信息的字段是导致错误的 DateField
。
您需要将接收到的日期时间对象的字符串表示形式转换为 Python datetime.date
对象。
这可以使用 .strptime()
来完成,其中 returns 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
是您想要保存在数据库中的所需值。
在我的 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)
问题出在时间上,00:00:00。
如果删除它,可能会起作用。
您正在尝试保存和解析日期和时间。这是无效的。
您可以使用 DateTimeField 而不是 DateField 或编写自定义日期格式。看到这个:https://docs.djangoproject.com/en/1.8/ref/settings/#date-format 但我建议不要这样做 - 本地化存在问题。
只需遵循您的日期格式,而不是日期时间格式。
您收到的字符串包含有关日期和时间的信息。但是,您用来在数据库中保存该信息的字段是导致错误的 DateField
。
您需要将接收到的日期时间对象的字符串表示形式转换为 Python datetime.date
对象。
这可以使用 .strptime()
来完成,其中 returns 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
是您想要保存在数据库中的所需值。