2012-12-11 11 views
5

zB:konvertiert Datetime-Objekt in einer bestimmten Zeitzone Epoche Sekunden in dieser Zeitzone

>>> print dt
2012-12-04 19:00:00-05:00

Wie Sie sehen können, habe ich dieses Datetime-Objekt Wie kann ich dieses Datetime-Objekt zu Epoche konvertieren Sekunden in GMT -5.

Wie mache ich das?

+4

Epochen Sekunden existieren nicht von Zeitzone. Per Definition sind sie UTC und sind weltweit gleich. Jede Zeitzone wird zur lokalen Zeit konvertiert. –

+0

@jimmcnamara Das ist der Schlüssel. Sehr hilfreich, mein Herr. –

Antwort

6

Ihre Datetime ist keine naive Datetime, sie weiß um die Zeitzone, in der sie sich befindet (Ihre Print-States sind -5). Sie müssen also nur als utc setzen, bevor Sie es konvertieren

>>> import time, pytz 
>>> utc = pytz.timezone('UTC') 
>>> utc_dt = utc.normalize(dt.astimezone(utc)) 
>>> time.mktime(utc_dt.timetuple()) 
1355270789.0 # This is just to show the format it outputs 

Epoche Wenn das dt Objekt ein naives Datetime-Objekt war, würden Sie brauchen, um mit Zeitzonen arbeiten einzuhalten Zeit zu Sommerzeit, während der Suche nach korrekte Stunden zwischen GMT 0. Zum Beispiel, Rumänien im Winter hat es +2 und im Sommer +3.

Für Ihre -5 Beispiel wird New York tun:

>>> import time,pytz 
>>> timezone = pytz.timezone('America/New_York') 
>>> local_dt = timezone.localize(dt) 

Jetzt haben Sie eine nicht-naive Datumzeit haben, und Sie können die Epoche Zeit zu bekommen, wie ich zuerst erklärt. Viel Spaß

+1

Vermutlich codiert das "-05: 00" bereits den richtigen Offset für die angegebene Datums- und Zeitzone. Warum also die Mühe machen, rückwärts zu arbeiten? –

+0

Danke, ich habe die -5 im Print verpasst. Ich habe die Antwort angepasst, um zu erklären, wie man aus nicht-naivem Datum auch konvertieren kann. – mihaicc

+0

Diese Lösung funktionierte besser für mich. http://stackoverflow.com/a/11111177/969984 –

Verwandte Themen