es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python datetime utcnow vs Luxon Datetime.fromMillis. Python datetime utcnow returns the current UTC datetime. On the other hand, Luxon Datetime.fromMillis is a method that allows you to create a Luxon datetime object from a given millisecond value. Python datetime utcnow retorna la fecha y hora actual en UTC. Por otro lado, Luxon Datetime.fromMillis es un método que te permite crear un objeto Luxon datetime a partir de un valor de milisegundos dado.

Estoy tratando de entender las implicaciones de usar .utcnow vs. .now en el DateTime de Python.

Aquí está la razón de mi confusión: vivo en Francia. En este momento, tenemos una diferencia de +1 hora con respecto a la zona horaria UTC (zona horaria CET en invierno (ahora) / zona horaria CEST (+2) en verano).

Si tomo el siguiente valor:

dt = datetime.datetime.utcnow()
dt.strftime('%c') # jueves 9 de diciembre de 2021 16:17:38
int(dt.timestamp()) # 1639063064

Esto es correcto tal como está, en Francia en este momento son las 17:17. Entonces, según mi entendimiento, ese timestamp, 1639063064, es la representación UTC del tiempo desde el EPOCH.

Pero si pruebo este valor en el sitio web Epoch Converter, obtengo:

  • GMT: jueves 9 de diciembre de 2021 15:17:44
  • Tu zona horaria: jueves 9 de diciembre de 2021 16:17:44 GMT+01:00

Parece que el sitio web TAMBIÉN resta mi zona horaria a un valor que ya ha sido “restado”, lo que resulta en eliminar dos veces la zona horaria y provocar un valor inválido.

La confusión actual es cuando intenté importar ese timestamp UTC a Luxon en mi aplicación frontend, lo siguiente no funciona:

DateTime.fromMillis(parseInt(ts), { zone: 'utc' }).toLocal().setLocale('en')

Estoy una hora por detrás.

¿Cómo puedo “decirle” a Luxon que el TS actual está en la zona horaria UTC y llamar a toLocal aplicará la zona horaria correcta del usuario?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Al utilizar el módulo datetime de Python, llamar al método .now() devolverá la fecha y hora actuales en la zona horaria local de la máquina donde se está ejecutando el código, mientras que llamar a .utcnow() devolverá la fecha y hora actuales en la zona horaria UTC.

    En el ejemplo dado, se utiliza datetime.datetime.utcnow() para obtener la hora actual en la zona horaria UTC, y int(dt.timestamp()) devuelve el número de segundos transcurridos desde el 1 de enero de 1970 a las 00:00:00 UTC (también conocido como el Epoch de Unix). Sin embargo, al convertir este timestamp de Unix a una fecha y hora local, es importante tener en cuenta la diferencia de horario local respecto a UTC.

    El sitio web Epoch Converter resta la diferencia de horario de la zona horaria del visitante del timestamp de Unix antes de mostrar la fecha y hora local, lo cual conduce a una conversión incorrecta si el timestamp de entrada ya está en la zona horaria UTC.

    Al utilizar Luxon, uno puede especificar la zona horaria de entrada al crear un objeto DateTime utilizando el método DateTime.fromMillis(). En el ejemplo de código proporcionado, se especifica la zona horaria UTC como { zone: 'utc' }. Para convertir el objeto DateTime resultante a la zona horaria local, se puede utilizar el método .toLocal(), así como .setLocale() para establecer el idioma de visualización deseado. Sin embargo, es importante asegurarse de que se tenga en cuenta correctamente la diferencia de horario local para obtener una fecha y hora local precisa. Para lograr esto, se puede utilizar el objeto Settings de Luxon para establecer la diferencia de horario local, o se puede obtener dinámicamente del sistema utilizando la propiedad DateTime.local().offset.

Comments are closed.