Python:timezone.localize()不起作用

时间:2013-03-26 16:09:21

标签: python datetime timezone

我遇到一些让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()

2 个答案:

答案 0 :(得分:14)

.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)

答案 1 :(得分:8)

使用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)