在Django中格式化字符串日期时间
在我的Django应用中,我从一个网络服务获取时间,这些时间是以字符串的形式提供的,我在模板中使用这些字符串:
{{date.string}}
这给我的日期看起来像这样:
2009-06-11 17:02:09+0000
这些日期显然有点难看,我想把它们以更好看的格式展示给用户。Django有一个很棒的内置日期格式化工具,可以完美满足我的需求:
{{ value|date:"D d M Y" }}
不过,这个工具需要输入的值是日期对象,而不是字符串。所以我不能用这个工具来格式化日期。经过在StackOverflow上搜索,我发现Python的strptime函数似乎可以实现我想要的功能,但因为我对Python还比较陌生,我在想有没有更简单的方法来用字符串进行日期格式化,而不需要自己写一个全新的自定义strptime模板标签呢?
2 个回答
0
这段内容跟Django标签没关系,但这里有一段关于strptime的代码:
d = strptime("2009-06-11 17:02:09+0000", "%Y-%m-%d %H:%M:%S+0000")
请注意,你正在忽略时区信息。
11
你最好在视图代码中处理从网络服务接收到的字符串,然后把日期时间(或者字符串)传递给模板进行显示。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)的时差,可以试试一个很棒的第三方库dateutils,它可以轻松处理多种格式的日期解析,包括时区,而不需要像strptime那样提供时间格式模板。