【问题标题】:Is this valid ISO8601 string?这是有效的 ISO8601 字符串吗?
【发布时间】:2021-04-12 21:05:31
【问题描述】:

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()

【问题讨论】:

  • 是的,根据the wiki on ISO_8601(另见ISO/TC154N,第29页)。但也许 aws 服务需要Z 而不是+00:00? (如果是这样,只需进行字符串替换,参见例如here
  • 请让我知道哪个服务返回了错误,以便我可以让团队知道这可能是一个潜在的误导性错误消息。
  • @DennisTraub 它是 AWS Kendra。索引文件时报告错误。
  • @MrFuppes 我做了字符串替换,想出了类似2012-12-11T12:00:00.000Z 的东西,它被接受了。 (FWIW 我不关心这个特定用例中的小时/分钟/秒)
  • 是的。我认为该错误消息具有误导性,并且已将其转发给 Kendra 团队。感谢您提出这个问题!

标签: amazon-web-services datetime python-datetime epoch iso8601


【解决方案1】:

是的,2012-12-11T00:00:00+00:00 这样的格式由 ISO 8601 指定 - 参见例如wikipedia/ISO8601C.4.2 Date and Time 的 ISO/TC154N,第 29 页。

然而,从评论部分看来,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    相关资源
    最近更新 更多