2013-03-26 14 views
5

Ho alcuni problemi con il timezone.localize() per funzionare correttamente. Il mio obiettivo è quello di prendere la data di oggi e convertirla da CST a EST. Quindi, infine, formattare il datetime prima di sputarlo. Sono in grado di formattare correttamente la data, ma il datetime non sta cambiando da CST a EST. Inoltre, quando formatto la data, non vedo la rappresentazione testuale del fuso orario incluso.Python: timezone.localize() non funziona

Qui di seguito ho elencato un semplice programma che ho creato per testare il tutto:

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

È sembrano mancare un ')' 'nella tua curtime = .. .' linea. –

+0

grazie, scusa ho digitato un esempio veloce per fare la mia domanda. – WorkerBee

risposta

8

.localize() prende un oggetto datetime naive e lo interpreta come se è in quel fuso orario. Lo standard non sposta l'ora in un altro fuso orario. Un oggetto datetime ingenuo ha no informazioni sul fuso orario per essere in grado di rendere possibile quella mossa.

Si desidera interpretare now() nel vostro locale fuso orario, invece, quindi utilizzare .astimezone() di interpretare il datetime in un altro fuso orario:

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

Grazie a chi ha funzionato, in realtà ho provato qualcosa di simile prima ma non ho localizzato() 'la volta prima che provassi a cambiare il fuso orario (' astimezone() '). Stavo anche applicando 'strftime()' quando ero 'localize()' occupandomi del tempo. Sembra oltre ad avere una comprensione di 'localize()' e 'astimezone()' anche l'ordine in cui è formattata la data è importante, grazie ancora. – WorkerBee

4

Usa cst.localize per fare un datetime ingenuo in un datetime fuso orario-aware.

Quindi utilizzare astimezone per convertire un datetime timezone-aware in un altro fuso orario.

import pytz 
import datetime 

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