Python:timezone.localize()无法正常工作


问题内容

我遇到一些问题,timezone.localize()无法正常工作。我的目标是掌握今天的日期并将其从CST转换为EST。然后最后格式化日期时间,然后将其吐出。我可以正确格式化日期,但datetime不会从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()

问题答案:

.localize()需要幼稚DateTime对象并对其进行解释 ,就好像 它是在该时区。它并 没有 时间移动到另一个时区。天真的日期时间对象
没有 时区信息,因此无法进行移动。

您想改为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)