Conversión timestamp Unix to fecha legible para mostrar en una template

214 views
Skip to first unread message

Luis Fernando Ortiz

unread,
Feb 23, 2021, 3:08:46 AM2/23/21
to Django-es
Hola buenos días, hoy traigo una pregunta espero que más interesante.  Os cuento, tengo una conexión a una bdd Mysql obtenida con inspectdb, me ha traído la estructura de las tablas; que lo único que hago es consultarlas; pero tengo la mala suerte que los campos de fecha en esas tablas están en modo UnixTime y Django los ha visto como BigIntegerField, os pego unos ejemplos procedentes del models.py de la app:

startdate = models.BigIntegerField()
enddate = models.BigIntegerField()

Al mostrarlos en la template, he usado el filtro date, tal que así:

<td>{{object.enddate|date:'U'}}</td>

Pero no me muestra nada, evidentemente, si quito el filtro, me muestra el contenido numérico del campo.

He estado mirando datetime, pero en principio, no encuentro como aplicarlo a la cuestión, porque esta template la usa una vista DetailView, estoy pensando en modificar el models.py correspondiente a esta tabla para hacer que haga un return de los campos ya "tuneados" a fecha, o sobreescribir algún método de la detailview para convertir de unixtime a fecha humana.

¿Se os ocurre una buena solución?

Gracias por vuestro tiempo y un saludo

carlos

unread,
Feb 23, 2021, 9:23:43 AM2/23/21
to djan...@googlegroups.com
mira en el ejemplo que te pego si podes cambiar las fechas
de esta manera
import datetime

timestamp = 1579117901
value = datetime.datetime.fromtimestamp(timestamp)
print(f"{value:%Y-%m-%d %H:%M:%S}")
https://stackoverflow.com/questions/3682748/converting-unix-timestamp-string-to-readable-date
https://www.w3resource.com/python-exercises/date-time-exercise/python-date-time-exercise-6.php
eso es lo que andabas buscando?

saludos


--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a django-es+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/django-es/e86a3e3c-36b7-4d83-9c50-d349822941bfn%40googlegroups.com.


--
att.
Carlos Rocha

Javier Guignard

unread,
Feb 23, 2021, 10:58:46 AM2/23/21
to Django-es
Hola,  el filter date te sirve para convertir un date a un string, no al revés, por lo que <td>{{object.enddate|date:'U'}}</td> no te va a servir.
Podes solucionarlo con un custom template tag>
1° En tu app, tenes que crear una carpeta que se llame templatetags con un __init__.py y un archivo con un nombre significativo custom_template_tag.py
proyect/
    ....
    app/
        templatestag/
               __init__.py
               custom_template_tag.py
        views.py
        models.py
    ....


2° Dentro del archivo .py pones el codigo que te puso Carlos, pero adentro de una funcion:

from django import template
register = template.Library()

@register.filter
def timestamp_to_date(value):
       return datetime.datetime.fromtimestamp(timestamp)

3° En tu html, importas tu custom template tag
{% load custom_template_tag %}

4° Por ultimo, en tu td:
     <td>{{object.enddate|timestamp_to_date|date:'SHORT_DATE_FORMAT'}}</td> 
Donde object.enddate|timestamp_to_date va a ser el date, y despues le das el formato que quieras, en mi caso DD/MM/YYYY con SHORT_DATE_FORMAT

Saludos
Javier

Luis

unread,
Feb 24, 2021, 2:32:10 AM2/24/21
to djan...@googlegroups.com
Gracias gente, sois grandes, en cuanto tenga unos minutos pruebo vuestras sugerencias.  Un saludo y  mil gracias otra vez...

--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a django-es+...@googlegroups.com.


--
"Dadle más hardware a un ingeniero de Microsoft y seguro que lo llena con pijadas y clips que tienes que buscar para cerrarlos porque a algún capullo se le ocurrió programarlo. (V. Viñals)"

************************************
Luis Fernando Ortiz Gimenez
email: ortizgimenez at gmail dot com
*************************************

Luis Fernando Ortiz

unread,
Feb 24, 2021, 7:56:22 AM2/24/21
to Django-es
Hola gente, he probado el código del filtro y va bien, el filtro custom_template_tag.py al final ha quedado así:

from django import template
register = template.Library()

from datetime import datetime

@register.filter
def timestamp_to_date(value):
       return datetime.fromtimestamp(value)

Gracias mil gente, aunque me repita sois grandes...

Reply all
Reply to author
Forward
0 new messages