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