我有一个在python 3.6.4上运行的python脚本,请在本地购买,尝试在具有python 2.7的系统上运行它。
File "report_scheduler.py", line 5, in <module>
from datetime import datetime, timedelta, timezone, tzinfo
ImportError: cannot import name timezone
我似乎无法导入时区模块。我似乎无法安装时区模块。有没有简单的方法可以导入该模块或修改脚本以使其不需要?我对该模块的仅有两个引用如下。
from datetime import datetime, timedelta, timezone, tzinfo
last_run=(row[4]).replace(tzinfo=timezone.utc)
time_since_last_request = datetime.now(timezone.utc) - last_run
答案 0 :(得分:1)
1)的原因:如概述this answer datetime.now(timezone.utc)
中的版本仅适用于Python 3.2和更高版本
2)进行修复:我将使用以下简短代码段,例如以下[check this other answer作为参考]:
import pytz # 3rd party: $ pip install pytz
from datetime import datetime
u = datetime.utcnow()
u = u.replace(tzinfo=pytz.utc) #NOTE: it works only with a fixed utc offset
# print(u) # prints UTC time
# print(u.astimezone(pytz.timezone("America/New_York"))) # prints another timezone
答案 1 :(得分:0)
首先,您不是在导入timezone
模块,而是从timezone
模块导入datetime
类。因此,即使有这样的事情,尝试安装timezone
模块也无济于事。
同时,正如the docs所说,timezone
类是在Python 3.2中添加的,因此在2.7中没有它。
以前datetime
模块的反向移植是从Python 3.4到2.7,这可以解决您的问题,但似乎早在几年前就被放弃了。
因此,只需修改代码即可,而无需timezone
。
幸运的是,您使用过的timezone
的唯一实例是UTC实例,并且很容易解决。
timezone
类只是tzinfo
类的预构建实现。在2.x中,您必须实现自己的tzinfo
类。但是文档中琐碎的class UTC
示例恰好正是您想要的:
ZERO = timedelta(0)
HOUR = timedelta(hours=1)
class UTC(tzinfo):
"""UTC"""
def utcoffset(self, dt):
return ZERO
def tzname(self, dt):
return "UTC"
def dst(self, dt):
return ZERO
utc = UTC()
现在,在所有使用timezone.utc
的地方,只需使用utc
,就可以了。