datetime.strptime奇怪的行为

时间:2019-08-23 22:37:11

标签: python amazon-web-services amazon-ec2 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'

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

2 个答案:

答案 0 :(得分:2)

在官方的Python错误跟踪器上查看this discussion。显然,Get-ItemProperty Web | Select-Object -ExpandProperty Web仅支持%ZUTC和本地时区(由GMT返回)。

这是一个很有趣的情况,official Python docs具有误导性(说得很好):

  

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

这是错误的。 time.tzname仅会识别%ZEST等。如果它们是操作系统的本地时区

编辑好吧,文档页面底部附近有一个注释,提示

  

CST   如果%Z返回tzname(,则None将替换为空字符串。否则,%Z将被返回值替换,该值必须是字符串。

还是,不是很清楚。

为清楚起见:

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

答案 1 :(得分:1)

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

更实用。