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()接受一个简单的 datetime 对象并将其解释为就好像它在那个时区中一样。它不会时间移动到另一个时区。一个天真的 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)
于 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 回答