2013-03-26 3 views
5

timezone.localize()が正常に動作するにはいくつかの問題があります。私の目標は、今日の日付を取得し、それをCSTからESTに変換することです。最後に、datetimeを吐き出す前にフォーマットしてください。私は日付を正しくフォーマットすることができますが、日時はCSTからESTに変更されていません。また、日付を書式設定するときに、タイムゾーンのテキスト表現が表示されません。Python: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オブジェクトを受け取り、それがタイムゾーンにあるかのように解釈ではなく、は別のタイムゾーンに時間を移動します。ナイーブな日時オブジェクトには、はありません。タイムゾーン情報は、その移動を可能にすることができます。

あなたは別のタイムゾーンで日時を解釈する.astimezone()を使用し、その後、代わりにあなたの地元タイムゾーンでnow()を解釈したい:

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

ありがとうございました。私は実際に以前と同様のことを試しましたが、タイムゾーンを変更しようとする前に 'localize()'しませんでした( 'astimezone()')。また、私が 'localize()'したときに 'strftime()'を適用していました。 'localize()'と 'astimezone()'の理解の横にあるようですが、日付の書式設定の順序も同じです。もう一度ありがとうございます。 – WorkerBee

4

使用cst.localizeは、タイムゾーンを意識した日時に素朴な日時を作るために:私はこれをテストするために作成した簡単なプログラムを列挙されている下

次に、astimezoneを使用して、タイムゾーン対応のdatetimeを別のタイムゾーンに変換します。

import pytz 
import datetime 

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