Python:timezone.localize()不工作

2024-06-25 23:36:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在让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()

Tags: importdatetimetime时间nowesttimezonethreading
2条回答

.localize()接受一个简单的datetime对象,并将其解释为就好像它在那个时区一样。它不会将时间移到另一个时区。一个简单的datetime对象有no时区信息,可以使移动成为可能。

您想在您的本地时区中解释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)

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

相关问题 更多 >