在 linux 机器中出现 astimezone 错误

Posted

技术标签:

【中文标题】在 linux 机器中出现 astimezone 错误【英文标题】:Getting astimezone error in linux machine 【发布时间】:2020-07-18 03:38:56 【问题描述】:

我使用的是 linux aws 机器,当我执行 datetime.datetime.now 时存在时区差异。所以我尝试了这种方法来克服时区错误

format = "%Y-%m-%d %H:%M:%S %Z%z"
current_date = datetime.datetime.now()
now_asia = current_date.astimezone(timezone('Asia/Kolkata'))
print(now_asia.strftime(format))

当我做我的窗口机器时,我没有收到任何错误。当我在我的 linux 机器上使用相同的行时,我得到“ValueError: astimezone() cannot be applied to a naive datetime”

为了调试这个,我尝试了这个链接中提到的方法 pytz and astimezone() cannot be applied to a naive datetime

当我尝试第一个答案时,我没有收到任何错误,但时区未转换。 当我尝试第二个答案时,我收到一个错误'AttributeError:'module'对象没有属性'utcnow'

我试过了

>>>loc_date = local_tz.localize(current_date)
>>> loc_date
datetime.datetime(2020, 4, 6, 7, 23, 36, 702645, tzinfo=<DstTzInfo 'Asia/Kolkata' IST+5:30:00 STD>)
>>> loc_date.strftime(format)
'2020-04-06 07:23:36 IST+05:30'

我知道了,所以根据印度时间,如果我们加上 5:30,那将是正确的。我该怎么做。

【问题讨论】:

你使用的是哪个 Python 版本? 我使用python 3.7 【参考方案1】:

请检查您是否确实在云中运行 Python 3.7 解释器。引用the documentation for the astimezone() function:

在 3.6 版中更改:现在可以在 假定代表系统本地时间的简单实例上调用 astimezone() 方法

确实,我刚刚使用 Python 3.5.9 和 pytz 2019.3 测试了脚本,我得到了

  File "timez.py", line 6, in <module>
    now_asia = current_date.astimezone(timezone('Asia/Kolkata'))
ValueError: astimezone() cannot be applied to a naive datetime

但在 Amazon Linux 2 AMI 实例上使用 Python 3.7.6 时,代码运行正常。

不过,我建议从一开始就使用可识别时区的日期时间。

在the code you're referencing 中,您会发现没有utcnow 属性,因为该代码导入from datetime import datetime,而您正在执行import datetime。为了让它工作,你会使用

now_utc = datetime.datetime.utcnow().replace(tzinfo=pytz.utc)

但请注意,Python documentation 现在建议您在datetime.now 中使用tz 参数:

import datetime
import pytz

now_utc = datetime.datetime.now(tz=pytz.utc)
local_tz = pytz.timezone('Asia/Kolkata')
now_asia = now_utc.astimezone(local_tz)

format = "%Y-%m-%d %H:%M:%S %Z%z"
print(now_asia.strftime(format))

在我的情况下打印2020-04-22 09:25:21 IST+0530

【讨论】:

以上是关于在 linux 机器中出现 astimezone 错误的主要内容,如果未能解决你的问题,请参考以下文章

astimezone() 不能应用于天真的日期时间

AttributeError:“列表”对象没有属性“astimezone”

pytz.astimezone 不考虑夏令时?

使用 .Net Core 在 linux 机器上查找内核数失败并出现错误(未终止的引用字符串)

内网一台Linux服务器一设网关即出现网络连接延迟,相同环境的Windows机器没有问题,不知何故?

工作中Linux常用命令总结(妙啊)