2013-03-26 18 views
5

timezone.localize()'un düzgün çalışması için bazı sorunlar yaşıyorum. Amacım bugünün tarihini alıp CST'den EST'ye çevirmek. Ardından datetime'ı tükürmeden önce biçimlendirin. Tarihi doğru formatlayabiliyorum, ancak tarih saati CST'den EST'ye değişmiyor. Ek olarak, tarihi biçimlendirdiğimde, saat diliminin metin sunumunu göremiyorum.Python: timezone.localize() çalışmıyor

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

Sen eksik görünüyor bir ')' senin 'curtime = içinde .. . –

+0

Teşekkürler, üzgünüm Soruyu sormak için hızlı bir örnek yazdım. – WorkerBee

cevap

8

.localize() saf bir tarih saat nesnesi alır ve bu zaman dilimine olduğu sanki yorumlar. saatini başka bir saat dilimine taşımamaktadır. Bir naif datetime nesnesinin, bu hareketi mümkün hale getirmek için no zaman dilimi bilgisi vardır.

Başka saat diliminde datetime yorumlamak için .astimezone() kullanmak sonra, bunun yerine yerel saat diliminde now() yorumlamak istiyorum:

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

Çalıştığınız için teşekkür ederim, ben daha önce benzer bir şey denedim ama ben zaman dilimi ('astimezone() ') değiştirmeye çalıştım önce()' yerelleştiremedim. Ayrıca, zamanın yerelleştirildiği sırada strftime() işlevini uyguluyordum. Yerel format() ve astimezone() 'nin tarihin biçimlendirildiği sıraya dair bir anlayışa sahip olmasının yanında, tekrar teşekkür ederiz. – WorkerBee

4

kullanın cst.localize bir zaman dilimi farkında datetime içine bir naif datetime yapmak: Ben bu test için oluşturulan basit bir programı listeledik

.

Saat dilimini kullanan bir datetime başka bir zaman dilimini dönüştürmek için astimezone kullanın.

import pytz 
import datetime 

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