25

timezone.localize()正しく動作するためにいくつかの問題があります。私の目標は、今日の日付を取得して、CSTからESTに変換することです。次に、最後に日時をフォーマットしてから吐き出します。日付を正しくフォーマットできますが、日時がCSTからESTに変更されていません。さらに、日付をフォーマットすると、タイムゾーンのテキスト表現が含まれていません。

以下に、これをテストするために作成した簡単なプログラムを示します。

#! /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()
4

2 に答える 2

36

.localize()ナイーブな日時オブジェクトを受け取り、それがそのタイムゾーンにあるかのように解釈します。時間を別のタイムゾーンに移動することはありません。ナイーブな日時オブジェクトには、その移動を可能にするタイムゾーン情報がありません。

代わりにローカルタイムゾーンで解釈now()し、次に別のタイムゾーンで日時を解釈するために使用します。.astimezone()

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)
于 2013-03-26T16:16:07.867 に答える
20

cst.localizeナイーブな日時をタイムゾーン対応の日時にするために使用します。

次に、を使用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)
于 2013-03-26T16:15:26.983 に答える