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

Python 格式化Django中作为字符串提供的日期时间,python,django,date,time,strptime,Python,Django,Date,Time,Strptime,在我的Django应用程序中,我从一个Web服务获取时间,该Web服务以字符串形式提供,我在模板中使用它: {{date.string}} 这为我提供了一个日期,例如: 2009-06-11 17:02:09+0000 这些显然有点难看,我想用一种好的格式向我的用户展示它们。Django有一个很棒的内置日期格式化程序,它可以实现我想要的功能: {{ value|date:"D d M Y" }} 但是,这需要将值作为日期对象而不是字符串提供。所以我不能用这个格式化它。在StackOverf

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

{{date.string}}
这为我提供了一个日期,例如:

2009-06-11 17:02:09+0000
这些显然有点难看,我想用一种好的格式向我的用户展示它们。Django有一个很棒的内置日期格式化程序,它可以实现我想要的功能:

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

但是,这需要将值作为日期对象而不是字符串提供。所以我不能用这个格式化它。在StackOverflow pythons上进行搜索后,strTime似乎完成了我想要的任务,但作为Python的新手,我想知道是否有人能想出一种更简单的方法来使用字符串获取日期格式,而不必编写一个全新的自定义strTime模板标记

这不处理Django标记,但strtime代码是:

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

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

您最好在视图代码中解析从Web服务接收的字符串,然后将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})

正如Matthew所指出的,这会降低时区。如果您希望保留与GMT的偏移量,请尝试使用优秀的第三方库,该库可以无缝地处理多种格式的解析日期以及时区,而无需提供诸如strtime之类的时间格式模板。

您可能会争辩说,既然您正在格式化日期,在表示层中这样做是合适的(即,模板)我喜欢保持我的“上下文”json可用,因为这允许我也将它们作为REST响应返回。Python datetime不可json序列化,所以我宁愿在模板中进行转换。我想这可以通过使用templatetag来实现。