如何用Django的日期模板标签将秒转换为hh:mm:ss?

1 投票
2 回答
2398 浏览
提问于 2025-04-15 16:30

编辑:有没有简单的方法把 {{ value|date:"Z" }} 转换成 +hh:mm 或 -hh:mm 这样的格式(因为 date:"Z" 返回的是 xxxx 或 -xxxx 秒)。

想了解更多关于所需格式的解释,可以查看 这个链接

谢谢你,抱歉我的英语不好。;)

2 个回答

1

你需要的是O,而不是Z(这里的“O”是发音为“哦”,而不是数字“零”)。

>>> from django.template import *
>>> Template('{% now "Y-m-d\TH:i:sO" %}').render(Context())
u'2009-11-29T14:33:59-0600'
2

这里澄清一下,时区偏移需要加冒号,比如上面的例子 2009-11-29T14:33:59-0600 应该写成 2009-11-29T14:33:59-06:00,这样才能符合W3C的标准。

看看 django/utils/dateformat.py 里的代码:

  def O(self):
    "Difference to Greenwich time in hours; e.g. '+0200'"
    seconds = self.Z()
    return u"%+03d%02d" % (seconds // 3600, (seconds // 60) % 60)

你可以修改 你本地的django副本,加上冒号,像这样:return u"%+03d:%02d" % (seconds // 3600, (seconds // 60) % 60),或者创建一个自己的模板标签来实现类似的功能。但最简单的方法可能是在你的视图里构建这个字符串,然后把它作为变量传递给模板。

看起来HTML5版本的时区功能不能直接使用。

[更新]

想了一下,你可能可以这样做:

>>> from django.utils import dateformat
>>> fmt = "Y-m-d\TH:i:sO"
>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2009, 12, 1, 12, 39, 48, 655867)
>>> str = dateformat.format(now, fmt)
>>> print str
2009-12-01T12:39:48+0000
>>>

然后加上冒号

>>> s = str[:-2] + ':' + str[-2:]
>>> s
u'2009-12-01T12:39:48+00:00'
>>> 

撰写回答