Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

214
Vistas
Django: Trunc datetime da como resultado ninguno

Tengo el siguiente modelo:

 class Statistic(models.Model): meter = models.ForeignKey(Meter, on_delete=models.CASCADE, db_index=True) timestamp_start = models.DateTimeField(db_index=True) timestamp_end = models.DateTimeField(db_index=True) usage_start = models.DecimalField(max_digits=10, decimal_places=3) usage_end = models.DecimalField(max_digits=10, decimal_places=3) return_start = models.DecimalField(max_digits=10, decimal_places=3) return_end = models.DecimalField(max_digits=10, decimal_places=3)

Tengo el siguiente valor en el primer registro de timestamp_start en mi base de datos sqllite

 2016-12-22T06:15:30.420+02:00

Cuando ejecuto la siguiente consulta:

 statistics = Statistic.objects.filter(id=1) .annotate(timestamp=Trunc('timestamp_start','day', output_field=DateTimeField())) .values('timestamp') .annotate(usage_start = Min('usage_start'))

la marca de tiempo da como resultado Ninguno

QuerySet [{'usage_start': Decimal('136.972'), 'timestamp': Ninguno}]

Cuando adjunto el depurador y verifico los primeros registros de mi tabla de estadísticas como este

 Statistics.objects.all()[0].timestamp_start

vuelve:

fechahora.fechahora(2016, 12, 22, 6, 0)

Antes de enfrentar este problema, obtuve esta excepción:

La base de datos devolvió un valor de fecha y hora no válido. ¿Están instaladas las definiciones de zona horaria para su base de datos y pytz?

Tengo pytz instalado. Pero no tengo idea de cómo arreglar esto. ¿El valor es incorrecto? De todos modos, al final configuré use_tz en settings.py en falso. La excepción desapareció pero trunc no devuelve ninguno ahora. ¿Esto está causando el problema?

pd: Mi entorno Python 3, Django, base de datos Sql lite, windows

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Probablemente no haya cargado los datos de la zona horaria en mysql. TruncDate usa la función CONVERT_TZ bajo el capó, que devuelve NULL si no hay datos de zona horaria disponibles. Puede verificar qué SQL está usando la consulta evaluando lo siguiente:

 str(statistics.query)

Las instrucciones de Windows para cargar datos de zona horaria se pueden encontrar aquí:

  • https://dev.mysql.com/downloads/timezones.html
  • https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html#time-zone-installation (Asegúrese de desplazarse hacia abajo en la sección que habla de Windows)

Me encontré con este problema en Linux y lo resolví como se indica en esta otra publicación de StackOverflow:

  • convert_tz devuelve nulo
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda