这是有效的 ISO8601 字符串吗?

问题描述

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/ISO8601C.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