问题描述
2012-12-11T00:00:00+00:00
其中一项 AWS 服务为此返回了错误
ErrorMessage Attribute submission-date is an invalid ISO 8601 String
我用来将纪元时间转换为 ISO 8601 的代码如下:
datetime.fromtimestamp(<epochTimeHere>,timezone.utc).isoformat()
解决方法
是的,像 2012-12-11T00:00:00+00:00
这样的格式由 ISO 8601 指定 - 参见例如ISO/TC154N 第 29 页的 wikipedia/ISO8601 或 C.4.2 Date and Time。
从评论部分来看,AWS 服务 (Kendra) 似乎期望 UTC 为 Z
(另请参阅 Kendra docs),而不是 Python 代码返回的 +00:00
。一个简单的解决方法可以是字符串替换:
datetime.fromtimestamp(<epochTimeHere>,timezone.utc).isoformat().replace('+00:00','Z')
旁注 - Python 也提供了另一个方向的捕获,即在解析 ISO 8601 时间戳时:内置 datetime.fromisoformat
方法 won't parse Z
到 UTC,但只有 +00:00
。