2011-11-16 10 views
11

Estoy trabajando con dhtmlxscheduler y estoy enviando fechas al servidor django para su procesamiento.Js Fecha object to python datetime

dhtmlxScheduler me proporciona el siguiente objeto de fecha, los métodos proporcionados inicio de la segunda línea a continuación:

end_date: Sat Nov 19 2011 01:00:00 GMT-0500 (EST) 
__proto__: Invalid Date 
constructor: function Date() { [native code] } 
getDate: function getDate() { [native code] } 
getDay: function getDay() { [native code] } 
getFullYear: function getFullYear() { [native code] } 
getHours: function getHours() { [native code] } 
getMilliseconds: function getMilliseconds() { [native code] } 
getMinutes: function getMinutes() { [native code] } 
getMonth: function getMonth() { [native code] } 
getSeconds: function getSeconds() { [native code] } 
getTime: function getTime() { [native code] } 
getTimezoneOffset: function getTimezoneOffset() { [native code] } 
getUTCDate: function getUTCDate() { [native code] } 
getUTCDay: function getUTCDay() { [native code] } 
getUTCFullYear: function getUTCFullYear() { [native code] } 
getUTCHours: function getUTCHours() { [native code] } 
getUTCMilliseconds: function getUTCMilliseconds() { [native code] } 
getUTCMinutes: function getUTCMinutes() { [native code] } 
getUTCMonth: function getUTCMonth() { [native code] } 
getUTCSeconds: function getUTCSeconds() { [native code] } 
getYear: function getYear() { [native code] } 
setDate: function setDate() { [native code] } 
setFullYear: function setFullYear() { [native code] } 
setHours: function setHours() { [native code] } 
setMilliseconds: function setMilliseconds() { [native code] } 
setMinutes: function setMinutes() { [native code] } 
setMonth: function setMonth() { [native code] } 
setSeconds: function setSeconds() { [native code] } 
setTime: function setTime() { [native code] } 
setUTCDate: function setUTCDate() { [native code] } 
setUTCFullYear: function setUTCFullYear() { [native code] } 
setUTCHours: function setUTCHours() { [native code] } 
setUTCMilliseconds: function setUTCMilliseconds() { [native code] } 
setUTCMinutes: function setUTCMinutes() { [native code] } 
setUTCMonth: function setUTCMonth() { [native code] } 
setUTCSeconds: function setUTCSeconds() { [native code] } 
setYear: function setYear() { [native code] } 
toDateString: function toDateString() { [native code] } 
toGMTString: function toGMTString() { [native code] } 
toISOString: function toISOString() { [native code] } 
toJSON: function toJSON() { [native code] } 
toLocaleDateString: function toLocaleDateString() { [native code] } 
toLocaleString: function toLocaleString() { [native code] } 
toLocaleTimeString: function toLocaleTimeString() { [native code] } 
toString: function toString() { [native code] } 
toTimeString: function toTimeString() { [native code] } 
toUTCString: function toUTCString() { [native code] } 
valueOf: function valueOf() { [native code] } 
__proto__: Object 

¿Cuál es el método más fácil para la elección de uno de estos métodos toString y luego analizarlo en el servidor de pitón lado usando datetime.strptime() para crear un objeto python datetime?

El método toString sencilla me devuelve una fecha y hora en el formato:

Sat Nov 19 2011 00:00:00 GMT-0500 (EST) 

Tratar las diferentes directivas de formato no tiene éxito.

es decir:

datetime.strptime("Sat Nov 19 2011 00:00:00 GMT-0500 (EST)", "%a %b %d %Y %H:%M:%S %Z") 
---> unconverted data remains: -0500 (EST) 

y:

datetime.strptime("Sat Nov 19 2011 00:00:00 GMT-0500 (EST)", "%a %b %d %Y %H:%M:%S %z") 
---> ValueError: 'z' is a bad directive in format '%a %b %d %Y %H:%M:%S %z' 

Respuesta

12

toUTCString() da:

"Tue, 22 Nov 2011 06:00:00 GMT" 

Y eso es parsible con:

datetime.strptime("Tue, 22 Nov 2011 06:00:00 GMT", "%a, %d %b %Y %H:%M:%S %Z") 
5

Parece que está obteniendo algo así como un objeto Date de JavaScript normal. En este caso, el método más fácil es, probablemente, utilizar el método getTime para obtener una marca de tiempo. Debería devolver algo como 1321463229215, que es solo una marca de tiempo en milisegundos.

fecha y hora de fromtimestamp espera una marca de tiempo en segundos, por lo que sólo dividir esa marca de tiempo de 1000,0 y ya está bueno para ir

from datetime import datetime 
datetime.fromtimestamp(1321463229215/1000.0) 
+2

Desafortunadamente ese método devuelve unidades de milisegundos después de segundos. es decir: hora: minuto: segundos: milésegundos. – TheOne

+1

Agregó una edición a la publicación de NT3RP para cambiar getUTCMilliseconds a getTime y dividió la marca de tiempo entre 1000.0 ya que fromtimestamp espera una marca de tiempo en segundos, no en milisegundos. – Andrew

1

Trate de usar pitón-dateutil (PIP instalar Python-dateutil)

import dateutil.parser as dt 
date_time_obj = dt.parse("Tue, 22 Nov 2011 06:00:00 GMT") 

date_time_obj será un objeto de fecha y hora