在Django中格式化字符串日期时间

9 投票
2 回答
26106 浏览
提问于 2025-04-15 12:11

在我的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那样提供时间格式模板。

撰写回答