如何在Django中将字符串转换为本地日期

2 投票
3 回答
1262 浏览
提问于 2025-04-17 18:16

我们在Django中做一个AJAX调用,用户输入一个日期和一个数字,然后这个AJAX调用会查找是否已经有一个包含该数字和日期的文档。

这个应用程序是国际化和本地化的。问题在于如何将AJAX发送的日期转换成一个有效的Python/Django日期对象。当然,这个转换需要根据当前用户的地区设置来进行。

我找到的一个解决方案并不奏效:Django: 如何在视图中获取日期格式?
get_format() 返回的是一个字符串(在我们的例子中是 j-n-Y),但是 strftime() 需要的是一种格式字符串,形式是 %j-%n-%Y

我搞不懂为什么Django的格式和 strftime() 的格式不一样,顺便说一下,我们现在使用的是Django 1.5。

我认为问题在于我找到的所有例子中,日期都是已经是日期对象,Python/Django只是进行格式化。我们需要的是将字符串转换成日期,使用当前的地区设置,然后再进行格式化。我原以为这是一个标准问题,但我找到并尝试的所有可能解决方案似乎都不管用……

谢谢,
Erik

3 个回答

0

如果你知道日期时间的格式,那么你就可以使用 datetime.strptime 这个工具。

我在代码中成功地用它配合 ajax 调用过。

想了解更多信息,可以查看这里: http://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

1

听起来让用户从日历中选择日期会更简单,而不是让他们输入日期的字符串。这样你就能准确知道他们选择了什么。

2

在Django提交一个问题让我找到了答案的线索。你可以通过对应的字段把特定类型的数据转换成一个对象,然后调用to_python()方法。在我处理日期的情况下,操作大概是这样的:

from django.forms.fields import DateField

field = DateField()
value = request.GET.get('date', '')
formatted_datetime = field.to_python(value)

Erik

撰写回答