Python vs Javascript DateTime

Estoy intentando convertir una llamada de API de Javascript a Python. El código de JavaScript funciona bien, generando una timestamp como esta:

var curdate = new Date(); var gmtstring = curdate.toGMTString(); var utc = Date.parse(gmtstring) / 1000; 

Este resultado (este número de segundos desde la época) es posteriormente hash y utilizado en la llamada API, pero esta es la sección relevante. Si alguien puede decirme la forma correcta de convertir esto, sería muy apreciado.

Aquí hay algunos detalles sobre los diferentes resultados de los diferentes methods:

Javascript (resultado de la API válida)

 var curdate = new Date(2013, 7, 10); var gmtstring = curdate.toGMTString(); var utc = Date.parse(gmtstring) / 1000; 

Resultado: 1376089200

Python (Resultado API no válido)

 from datetime import datetime import calendar d = datetime(2013, 8, 10) calendar.timegm(d.utctimetuple()) 

Resultado: 1376092800

Claramente me falta algo, ¿alguien puede iluminarme sobre esto?

Actualizar

Originalmente cometí un error en mis ejemplos, ya que Javascript usa dates basadas en 0 y las dates de Python están basadas en 1.

Jonathon amablemente explicó que la diferencia en los valores es diferente debido a que Python se está configurando de manera pnetworkingeterminada en UTC, ya que Javascript está pnetworkingeterminado en la zona horaria local. En mi caso, esto es GMT, que es el requerido por la API. Ahora solo necesito get este resultado en Python.

Responder

La solución fue un desajuste de las zonas horarias que se proporcionan. Aunque todavía tengo problemas con la API de terceros, al less ahora estoy obteniendo los times correctos.

Esto probablemente se pueda limpiar:

 from datetime import datetime import calendar import time import pytz def GenerateTimeStamp(d): europe = pytz.timezone('Europe/London') d = europe.localize(d) tuple = d.utctimetuple() timestamp = int(time.mktime(tuple)) return timestamp 

Solo proporcione una date y hora:

 GenerateTimeStamp(datetime(2013, 8, 10)) 

o

 GenerateTimeStamp(datetime.utcnow()) 

Como nota al margen, si estás probando esto y quieres instalar pytz 1 usando pip, puedes getlo usando la label previa 2 :

 pip install --pre pytz 

3 Solutions collect form web for “Python vs Javascript DateTime”

Para dates de JavaScript, el argumento del month es 0 – 11 . Entonces, para agosto, querrás pasar 7 .

Valor integer que representa el mes, comenzando con 0 de enero a 11 de diciembre.

También tienen diferentes zonas horarias pnetworkingeterminadas, con Python pnetworkingeterminado a UTC, mientras que JavaScript se pnetworkingetermina a la zona horaria " local " del usuario.

Puede usar Date.UTC() , que devuelve la timestamp, para el equivalente en JavaScript.

 var utc = Date.UTC(2013, 7, 10) / 1000; // 1376092800 

Nota al margen: puede usar getTime() para get la timestamp de una Date .

 var curdate = new Date(2013, 7, 10); var utc = curdate.getTime() / 1000; 

new Date(2013, 8, 10) en javascript significa 10 de septiembre de 2013.

datetime(2013, 8, 10) en Python significa 10 de agosto de 2013.

Estás comparando dos dates diferentes.

Hora local frente a UTC

Los resultados pueden ser diferentes. (zona horaria para mi sistema: Asisa / Seoul)

javascript

 > new Date(2013, 7, 10) / 1000 1376060400 > Date.UTC(2013, 7, 10) / 1000 1376092800 

Pitón

 >>> import calendar >>> import datetime >>> import time >>> time.mktime(datetime.datetime(2013, 8, 10).timetuple()) 1376060400.0 >>> calendar.timegm(datetime.datetime(2013, 8, 10).timetuple()) 1376092800 

Ver Python – calendar.timegm () vs. time.mktime ()

Además de la respuesta de Jonathan anterior, podría recomendar esto en el lado de Python:

  d = datetime(2013, 8, 10) d.strftime("%s") 

Eso volverá: '1376107200'

  • Convierta la date y hora de UTC a la hora de date local
  • Diferencia entre setUTCminutes versus setMinutes
  • Calcular la diferencia de date en javascript
  • Diferencia entre Java y Javascript el 1 de enero de 0001 UTC
  • JSON Stringify cambia la hora de la date debido a UTC
  • jquery datepicker getTime no UTC
  • Javascript: Obteniendo la date actual en milisegundos (UTC) (SIN uso de cadenas)
  • Javascript: convierte un object UTC Date () a la zona horaria local
  • Chrome interpreta el time ISO sin Z como UTC; C # problema
  • Eliminar time del formatting de hora GMT
  • ¿Cómo puedo determinar una zona horaria por el desplazamiento UTC?
  • Convertir UTC Epoch en una date local
  • Actualización de la compensación de time con moment (). UtcOffset ()
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.