格式化在Django中作为字符串提供的日期时间

时间:2009-06-12 00:03:53

标签: python django date time strptime

在我的Django应用程序中,我从Web服务中获取时间,以字符串形式提供,我在模板中使用:

{{date.string}}

这为我提供了一个日期,例如:

2009-06-11 17:02:09+0000

这些显然有点难看,我想以一种很好的格式向我的用户展示它们。 Django有一个很棒的内置日期格式化程序,可以完全按照我想要的方式执行:

{{ value|date:"D d M Y" }}

但是,这需要将值作为日期对象提供,而不是字符串。所以我不能用它来格式化它。在这里搜索StackOverflow pythons strptime似乎做我想要的,但对Python来说相当新我想知道是否有人能想出一个更简单的方法来使用字符串获取日期格式,而不必诉诸于编写一个全新的自定义strptime模板标签?

2 个答案:

答案 0 :(得分:11)

您最好在视图代码中解析从webservice接收的字符串,然后将datetime.date(或字符串)传递给模板进行显示。 Django模板的精神在于那里应该进行很少的编码工作;它们仅用于演示,这就是为什么它们会阻止您编写嵌入HTML的Python代码。

类似的东西:

from datetime import datetime
from django.shortcuts import render_to_response

def my_view(request):
    ws_date_as_string = ... get the webservice date
    the_date = datetime.strptime(ws_date, "%Y-%m-%d %H:%M:%S+0000")
    return render_to_response('my_template.html', {'date':the_date})

正如马修指出的那样,这会缩短时区。如果您希望保留GMT的偏移量,请尝试使用优秀的第三方dateutils库,它可以使用时区无缝处理多种格式的解析日期,而无需提供像strptime这样的时间格式模板。

答案 1 :(得分:0)

这不涉及Django标记,但strptime代码是:

d = strptime("2009-06-11 17:02:09+0000", "%Y-%m-%d %H:%M:%S+0000")

请注意,您正在删除时区信息。