2013-03-26 10 views
5

मुझे कुछ समस्याएं timezone.localize() सही तरीके से काम करने के लिए मिल रही हैं। मेरा लक्ष्य आज की तारीख को पकड़ना और इसे सीएसटी से ईएसटी में परिवर्तित करना है। फिर अंत में इसे थूकने से पहले डेटाटाइम प्रारूपित करें। मैं तारीख को सही तरीके से प्रारूपित करने में सक्षम हूं, लेकिन डेटाटाइम सीएसटी से ईएसटी में नहीं बदल रहा है। इसके अतिरिक्त जब मैं दिनांक को प्रारूपित करता हूं तो मुझे टाइमज़ोन के टेक्स्ट प्रस्तुति को शामिल नहीं किया जाता है।पायथन: timezone.localize() काम नहीं कर रहा

नीचे मैं मैं इस बाहर का परीक्षण करने के लिए बनाया एक साधारण प्रोग्राम बाहर सूचीबद्ध किया है:

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

आप गायब हो रहे हैं एक ')' अपने 'curtime = में .. लाइन '। –

+0

धन्यवाद, क्षमा करें मैंने अपने प्रश्न पूछने के लिए एक त्वरित उदाहरण टाइप किया। – WorkerBee

उत्तर

8

.localize() एक अनुभवहीन datetime वस्तु लेता है और यह की व्याख्या के रूप में अगर यह है कि समय क्षेत्र में है। यह समय को दूसरे समय क्षेत्र में ले जाता है। एक निष्क्रिय डेटाटाइम ऑब्जेक्ट में कोई टाइमज़ोन जानकारी उस स्थान को संभव बनाने में सक्षम होने के लिए है।

आप के बजाय अपने स्थानीय समय क्षेत्र में now() व्याख्या करने के लिए, तो .astimezone() का उपयोग एक और समय क्षेत्र में datetime व्याख्या करने के लिए करना चाहते हैं:

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

धन्यवाद कि आपने काम किया, मैंने वास्तव में पहले कुछ ऐसा करने की कोशिश की लेकिन मैंने टाइमज़ोन ('astimezone()') को बदलने की कोशिश करने से पहले 'स्थानीयकरण') नहीं किया था। मैं 'strftime()' भी लागू कर रहा था जब मैं समय को स्थानीयकृत() कर रहा था। ऐसा लगता है कि 'लोकलाइज()' और 'अस्थिमेज़ोन()' की समझ रखने के अलावा जिस तारीख को तारीख भी स्वरूपित की गई है, धन्यवाद। – WorkerBee

4

उपयोग cst.localize एक समयक्षेत्र अवगत datetime में एक अनुभवहीन datetime बनाने के लिए।

फिर टाइमज़ोन-जागरूक डेटाटाइम को किसी अन्य टाइमज़ोन में परिवर्तित करने के लिए astimezone का उपयोग करें।

import pytz 
import datetime 

est = pytz.timezone('US/Eastern') 
cst = pytz.timezone('US/Central') 
curtime = cst.localize(datetime.datetime.now()) 
curtime = curtime.astimezone(est) 
संबंधित मुद्दे