Python 将带有本地时区的日期时间字符串转换为ISO 8601

Python 将带有本地时区的日期时间字符串转换为ISO 8601,python,datetime,Python,Datetime,我正在尝试通过执行以下操作将Oracle数据库中的DATETIME列转换为ISO 8601字符串: from datetime import datetime created_date_string = str(record.value['CREATION_DATE_UTC']) created_date = datetime.strptime(created_date_string, "%a %b %d %H:%M:%S %Z %Y") created_date_iso = created_

我正在尝试通过执行以下操作将Oracle数据库中的DATETIME列转换为ISO 8601字符串:

from datetime import datetime

created_date_string = str(record.value['CREATION_DATE_UTC'])
created_date = datetime.strptime(created_date_string, "%a %b %d %H:%M:%S %Z %Y")
created_date_iso = created_date.isoformat()
创建的日期字符串的值为2019年9月9日星期一06:25:18美国东部夏令时。运行此代码时,我遇到以下异常:

ValueError:时间数据“2019年9月9日星期一06:25:18 EDT”与格式“%a%b%d%H:%M:%S%Z%Y”不匹配

如果我从原始字符串中删除时区“EDT”并从格式中删除“%Z”,则它可以正常工作。如何构建一个ISO字符串来保存时区信息?我无法控制来自Oracle系统的日期格式的格式。需要生成ISO字符串才能插入Elasticsearch索引。

@MayankPorwal:OP想要转换为ISO-8601,而不是从中转换。@Sri我知道。。。这就是为什么我要在这里提出这个问题。如果没有时区信息,我无法转换,我正在寻找其他方法。因此,如果你有办法只识别时区,你就可以全部转换了?@ScottHunter EDT比UTC晚4小时(-04:00)。我是Python新手,但我认为strtime能够将其转换为必要的日期对象,同时保持指定的时区,但看起来它不能。正在寻找另一种方法来实现这一点。这样做的最终结果应该是“2019-09-06T10:25:18.000-04:00”。我一直在公司环境中使用Python 2.7。。。因此,Python 3的新功能就没有什么好运气了。@MayankPorwal:OP想转换成ISO-8601,而不是从它转换过来。@Sri我知道。。。这就是为什么我要在这里提出这个问题。如果没有时区信息,我无法转换,我正在寻找其他方法。因此,如果你有办法只识别时区,你就可以全部转换了?@ScottHunter EDT比UTC晚4小时(-04:00)。我是Python新手,但我认为strtime能够将其转换为必要的日期对象,同时保持指定的时区,但看起来它不能。正在寻找另一种方法来实现这一点。这样做的最终结果应该是“2019-09-06T10:25:18.000-04:00”。我一直在公司环境中使用Python 2.7。。。因此,Python3的新特性并不好用。