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

时间:2009-11-29 17:46:02

标签: python django django-templates

编辑:有没有办法轻松地将{{ value|date:"Z" }}转换为+ hh:mm或-hh:mm格式之一(因为日期:“Z”返回xxxx或-xxxx秒)。

显示this以获取有关所需格式的更多说明。

谢谢你,对不起我丑陋的英语。 ;)

2 个答案:

答案 0 :(得分: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'
>>> 

答案 1 :(得分:1)

而不是Z你需要O(那是“哦”,而不是“零”)。

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