为了账号安全,请及时绑定邮箱和手机立即绑定

datetime.strptime 奇怪的行为

datetime.strptime 奇怪的行为

胡说叔叔 2022-05-11 16:34:07
我在运行 python 3.6.8 的 aws 虚拟机上遇到以下错误,而在我的笔记本电脑上它与 python 3.6.1 一起工作正常   return datetime.strptime(date_str, self.date_format)  File "/usr/lib64/python3.6/_strptime.py", line 565, in _strptime_datetime    tt, fraction = _strptime(data_string, format)  File "/usr/lib64/python3.6/_strptime.py", line 362, in _strptime    (data_string, format))ValueError: time data 'Fri, 23 Aug 2019 20:24:46 IDT' does not match format '%a, %d %b %Y %H:%M:%S %Z'我使用的格式有什么问题?
查看完整描述

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

请参阅官方 Python 错误跟踪器上的讨论。显然%Z只支持UTC,GMT和本地时区(由 返回time.tzname)。

这是一个有趣的案例,官方 Python 文档具有误导性(说得好听):

%Z 时区名称(如果对象是幼稚的,则为空字符串)。(空)、UTC、EST、CST

这是错误的。只有当它们是操作系统的本地时区时%Z才会识别EST,CST等。

编辑好吧,文档中页面底部附近有一条注释说

%Z 如果tzname() 返回None,%Z则替换为空字符串。否则%Z被返回的值替换,它必须是一个字符串。

不过,还没有想象的那么清楚。

说清楚:

它可以在您的本地计算机上运行,因为它使用 IDT 作为其本地时区,而 AWS 远程计算机则不是这种情况。


查看完整回答
反对 回复 2022-05-11
?
慕容森

TA贡献1853条经验 获得超18个赞

datetime.datetime.strptime("IDT", "%Z")

产生错误


ValueError: time data 'IDT' does not match format '%Z'

因为 %Z 不支持 IDT(以色列夏令时)。


解决方案取决于您接下来要处理的数据。如果您使用pytz并忽略要从中剥离时间的日期字符串的“IDT”部分,那么您可以在记录时区时存储。


dt = datetime.datetime.strptime("Fri, 23 Aug 2019 20:24:46", "%a, %d %b %Y %H:%M:%S")

print(dt)


2019-08-23 20:24:46

然而


import pytz

idt = pytz.timezone('Israel')

dt_idt = dt.astimezone(idt)

print(dt_idt)


2019-08-23 22:24:46+03:00


查看完整回答
反对 回复 2022-05-11
  • 2 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信