2011-11-16 17 views
11

Sto lavorando con dhtmlxscheduler e sto inviando le date al server django per l'elaborazione.Js Date object to python datetime

dhtmlxScheduler mi fornisce il seguente oggetto data, le modalità previste dalla seconda riga sottostante:

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 

Qual è il metodo più semplice per la scelta di uno di questi metodi toString e poi l'analisi sul server pitone lato usando datetime.strptime() per creare un oggetto datetime python?

Il metodo toString semplice mi restituisce un datetime nel formato:

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

Cercando le diverse direttive di formato non abbia esito.

cioè:

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) 

e:

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' 

risposta

12

toUTCString() dà:

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

E questo è parsible con:

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

Sembra che tu stia ricevendo qualcosa come un normale oggetto Date javascript. In questo caso, il metodo più semplice è probabilmente quello di utilizzare il metodo getTime per ottenere un timestamp. Dovrebbe restituire qualcosa come 1321463229215, che è solo un timestamp in millisecondi.

datetime di fromtimestamp aspetta un timestamp in pochi secondi, quindi basta dividere che timestamp da 1000.0 e siete pronti per partire

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

Sfortunatamente questo metodo restituisce unità in millisecondi dopo secondi. vale a dire: ora: minuto: secondi: millesecondi. – TheOne

+1

Aggiunta una modifica al post di NT3RP per modificare getUTCMilliseconds in getTime e diviso il timestamp per 1000.0 poiché fromtimestamp prevede un timestamp in secondi, non millisecondi. – Andrew

1

Prova utilizzando python-dateutil (pip install python-dateutil)

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

date_time_obj sarà un oggetto datetime