datetime.strptime 奇怪的行为

我在运行 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'

我使用的格式有什么问题?


胡说叔叔
浏览 143回答 2
2回答

潇湘沐

请参阅官方 Python 错误跟踪器上的讨论。显然%Z只支持UTC,GMT和本地时区(由 返回time.tzname)。这是一个有趣的案例,官方 Python 文档具有误导性(说得好听):%Z 时区名称(如果对象是幼稚的,则为空字符串)。(空)、UTC、EST、CST这是错误的。只有当它们是操作系统的本地时区时%Z才会识别EST,CST等。编辑好吧,文档中页面底部附近有一条注释说%Z 如果tzname() 返回None,%Z则替换为空字符串。否则%Z被返回的值替换,它必须是一个字符串。不过,还没有想象的那么清楚。说清楚:它可以在您的本地计算机上运行,因为它使用 IDT 作为其本地时区,而 AWS 远程计算机则不是这种情况。

慕容森

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 pytzidt = pytz.timezone('Israel')dt_idt = dt.astimezone(idt)print(dt_idt)2019-08-23 22:24:46+03:00
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python