¿Cómo convertir segundos a hh: mm: ss con la etiqueta de plantilla de fecha de Django?

StackOverflow https://stackoverflow.com/questions/1816176

  •  08-07-2019
  •  | 
  •  

Pregunta

Editar: ¿hay alguna manera de convertir fácilmente {{value | date: " Z " }} a uno de los formatos + hh: mm o -hh: mm (porque la fecha: " Z " devuelve xxxx o -xxxx segundos).

Mostrar esto para más explicaciones sobre el formato necesario.

Gracias y perdón por mi feo inglés. ;)

¿Fue útil?

Solución

Solo aclarando aquí, es el desplazamiento de la zona horaria que necesita los dos puntos, es decir, 2009-11-29T14: 33: 59-0600 en el ejemplo anterior debería ser 2009-11-29T14: 33: 59-06: 00 para cumplir con las pautas del W3C.

Mirando el código en 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)

Puede editar su copia local de django para agregar el ':' entonces; return u "% + 03d:% 02d " % (segundos // 3600, (segundos // 60)% 60) o cree su propia etiqueta de plantilla para hacer efectivamente lo mismo. Pero probablemente lo más fácil es componer la cadena en su vista y pasarla como una variable a la plantilla.

No parece que la versión HTML5 de la zona horaria esté disponible de fábrica.

[actualización]

En la reflexión, probablemente podrías hacer esto;

>>> 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
>>>

y luego agregue el ':'

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

Otros consejos

En lugar de Z, necesita O (eso es un '' oh '', no un '' cero '').

>>> from django.template import *
>>> Template('{% now "Y-m-d\TH:i:sO" %}').render(Context())
u'2009-11-29T14:33:59-0600'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top