2013-03-26 13 views
5

Mam pewne problemy, aby uzyskać poprawną pracę timezone.localize(). Moim celem jest pobranie dzisiejszej daty i przekonwertowanie jej z CST na EST. Następnie sformatuj datetime przed wypluciem go. Jestem w stanie poprawnie sformatować datę, ale datetime nie zmienia się z CST na EST. Dodatkowo podczas formatowania daty nie widzę tekstowej reprezentacji strefy czasowej.Python: timezone.localize() nie działa

Poniżej Mam wymienione z prostego programu utworzonego w celu przetestowania na to uwagę:

#! /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

Wydaje się, że brakuje ')' 'w swojej curTime = .. Linia. –

+0

dziękuję, przepraszam napisałem szybki przykład, aby zadać moje pytanie. – WorkerBee

Odpowiedz

8

.localize() zajmuje naiwny obiekt datetime i interpretuje ją jakby jest w tej strefie czasowej. Wykonuje , a nie przenieść czas do innej strefy czasowej. Naiwny obiekt datetime ma informacje o strefie czasowej, aby móc wykonać ten ruch.

Chcesz interpretować now() w swoim lokalnej czasowej zamiast, a następnie użyć .astimezone() interpretować datetime w innej strefie czasowej:

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

Dziękuję, że działało, faktycznie próbowałem czegoś podobnego wcześniej, ale nie 'localize()' czas przed próbowałem zmienić strefę czasową ('astimezone()'). Stosowałem również 'strftime()', gdy byłem 'localize()' czas. Wydaje się, że oprócz zrozumienia 'localize()' i 'astimezone()' kolejność, w której data jest sformatowana, również ma znaczenie, dziękuję jeszcze raz. – WorkerBee

4

Zastosowanie cst.localize aby naiwny datetime do datetime czasowej świadomy.

Następnie użyj astimezone, aby przekonwertować strefę czasową świadomą stref czasowych na inną strefę czasową.

import pytz 
import datetime 

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