2013-03-26 13 views
5

Ich habe einige Probleme bekommen timezone.localize(), um richtig zu funktionieren. Mein Ziel ist es, das heutige Datum zu greifen und es von CST zu EST zu konvertieren. Dann formatiere endlich die Datetime, bevor du sie ausspuckst. Ich bin in der Lage, das Datum richtig zu formatieren, aber die Datetime ändert sich nicht von CST zu EST. Wenn ich das Datum formatiere, sehe ich auch nicht die Textdarstellung der Zeitzone.Python: timezone.localize() funktioniert nicht

Unten hat ich ein einfaches Programm aufgelistet I geschaffen, dies zu testen:

#! /usr/bin/python 
#Test script 

import threading 
import datetime 
import pexpect 
import pxssh 
import threading 
from pytz import timezone 
import pytz 

est = timezone('US/Eastern') 
curtime = est.localize(datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Z %Y")) 
#test time change 
#curtime = datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Z %Y") 

class ThreadClass(threading.Thread): 
    def run(self): 
    #now = (datetime.datetime.now() + datetime.timedelta(0, 3600)) 
    now = (datetime.datetime.now()) 
    print "%s says Hello World at time: %s" % (self.getName(), curtime) 

for i in range(3): 
    t = ThreadClass() 
    t.start() 
+0

Sie scheinen ein ')' im 'curtime = zu fehlen .. .' Linie. –

+0

danke, tut mir leid, ich tippte ein kurzes Beispiel, um meine Frage zu stellen. – WorkerBee

Antwort

8

.localize() nimmt ein naives DATETIME Objekt und interpretiert sie, als ob es in dieser Zeitzone ist. Es tut nicht verschieben Sie die Zeit in eine andere Zeitzone. Ein naives Datetime-Objekt hat keine Zeitzoneninformationen, um diese Bewegung möglich zu machen.

Sie wollen stattdessen now() in Ihrer lokalen Zeitzone zu interpretieren, dann .astimezone() verwenden, um die Datetime in einer anderen Zeitzone zu interpretieren:

est = timezone('US/Eastern') 
cst = timezone('US/Central') 
curtime = cst.localize(datetime.datetime.now()) 
est_curtime = curtime.astimezone(est).strftime("%a %b %d %H:%M:%S %Z %Y")) 

def run(self): 
    print "%s says Hello World at time: %s" % (self.getName(), est_curtime) 
+0

Danke das hat geklappt, ich habe vorher schon mal was ähnliches versucht, aber ich habe die Zeit nicht lokalisiert() bevor ich versucht habe die Zeitzone zu ändern ('astimezone()'). Ich habe auch die 'strftime()' angewendet, als ich '' localize' 'die Zeit definiert habe. Neben dem Verständnis von 'localize()' und 'atretimezone()' scheint auch die Reihenfolge, in der das Datum formatiert wird, ein großes Dankeschön. – WorkerBee

4

Verwenden cst.localize eine naive Datumzeit in eine Zeitzone-aware Datetime zu machen.

Verwenden Sie dann astimezone, um eine zeitzonenbewusste Datetime in eine andere Zeitzone zu konvertieren.

import pytz 
import datetime 

est = pytz.timezone('US/Eastern') 
cst = pytz.timezone('US/Central') 
curtime = cst.localize(datetime.datetime.now()) 
curtime = curtime.astimezone(est)