2011-11-16 18 views
11

Pracuję z dhtmlxscheduler i wysyłam daty do serwera django w celu przetworzenia.Js Data obiektu do python datetime

dhtmlxScheduler zapewnia mi dnia następującego obiektu, metody przewidziane zacząć od drugiej linii poniżej:

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 

Jaki jest najprostszy sposób na wybranie jednej z następujących metod toString a następnie analizowania go na serwerze python stronie za pomocą datetime.strptime(), aby utworzyć obiekt datetime Pythona?

Prosta metoda toString zwraca mi datetime w formacie:

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

Próbuje różnych dyrektyw formacie okaże się nieskuteczne.

tj:

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) 

oraz:

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' 

Odpowiedz

12

toUTCString() daje:

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

I to parsible z:

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

Wygląda na to, że otrzymujesz coś w stylu zwykłego obiektu Date języka javascript. W tym przypadku najprostszym sposobem jest prawdopodobnie użycie metody getTime w celu uzyskania znacznika czasu. Powinien zwrócić wartość podobną do 1321463229215, która jest tylko znacznikiem czasu w milisekundach.

datetime na fromtimestamp spodziewa się znacznik czasu w sekundach, więc po prostu podzielić tę znacznika czasu przez 1000.0 i jesteś dobry, aby przejść

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

Niestety, ta metoda zwraca milisekundy jednostek po sekundach. tj: godzina: minuta: sekundy: mille sekund. – TheOne

+1

Dodano edycję do posta NT3RP, aby zmienić getUTCMilliseconds na getTime i podzielić znacznik czasu na 1000.0, ponieważ fromtimestamp oczekuje znacznika czasu w sekundach, a nie milisekundach. – Andrew

1

Spróbuj użyć 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 będzie przedmiotem DateTime