Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python datetime.strTime奇怪的行为_Python_Amazon Web Services_Amazon Ec2_Strptime - Fatal编程技术网

Python datetime.strTime奇怪的行为

Python datetime.strTime奇怪的行为,python,amazon-web-services,amazon-ec2,strptime,Python,Amazon Web Services,Amazon Ec2,Strptime,我在运行Python3.6.8的aws虚拟机上遇到以下错误,而在我的笔记本电脑上,它可以与Python3.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

我在运行Python3.6.8的aws虚拟机上遇到以下错误,而在我的笔记本电脑上,它可以与Python3.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'
我使用的格式有什么问题吗?

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

这是一个有趣的案例,这些案例(说得好听一点)具有误导性:

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

这是错误的
%Z
将仅识别
EST
CST
操作系统的本地时区

编辑好吧,在文档页面底部附近有一个注释,上面写着

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

不过,这并不像可能的那么清楚

为了说明这一点:

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

datetime.datetime.strtime(“IDT”,“%Z”)
产生错误

ValueError:时间数据“IDT”与格式“%Z”不匹配
因为%Z不支持IDT(以色列夏时制)

解决方案取决于您接下来对数据所做的操作。如果使用并忽略要从中提取时间的日期字符串的“IDT”部分,则可以在记录时区时存储

dt=datetime.datetime.strtime(“2019年8月23日星期五20:24:46”,%a,%d%b%Y%H:%M:%S”)
打印(dt)
2019-08-23 20:24:46
鉴于

导入pytz idt=pytz.时区(“以色列”) dt_idt=dt.散光区(idt) 打印(dt_idt) 2019-08-23 22:24:46+03:00
更有用。

是的。。似乎只有在虚拟机中才是这样。当我将%Z替换为格式字符串中的IDT时,它将起作用。文档不会产生误导。该文本告诉您使用
datetime.strftime()
时将得到什么输出,从而将
datetime
实例转换为字符串。
datetime
实例有一个,这就是注释所指的。当谈到
datetime.strtime()
行为时,没有直接提到
%Z
。@MartijnPieters很公平,但是希望
strtime
的文档提到
%Z
如果看到一个非本地时区名称,就会严重中断,尤其是因为它会出现令人困惑的错误消息(它说格式不匹配,但确实匹配),所以文档在这方面肯定是缺乏的。见和。该实现使用了一个完全可调试的so,如果您愿意,只需进入
datetime.strtime()
调用即可。