如何在没有 dateutils 的情况下读取 python 中的非 ISO 和 ISO 格式的日期时间字符串?

How to read non-ISO and ISO formatted date-time string in python without dateutils?

我有以下三个 tz-aware date_str:

我尝试像这样在 python 中阅读它们:datetime.fromisoformat(date_str.replace('Z', '+00:00')),但是第一个失败了。

我猜是因为第一个不是ISO格式的。

我的问题是:python(没有第 3 方方法)是否有快速读取所有三种类型的 tz 感知日期字符串的方法?

要解析第一个例子,你可以这样做

datetime.datetime.strptime(date_str.replace("Z","+00:00"),"%Y-%m-%dT%H:%M:%S.%f%z")

顺便说一句,这也将处理第二个示例。

但这仍然需要为不同的格式选择不同的解析器。所以你有三个选择。

  1. 您编写代码(例如使用正则表达式)来检查您获得的字符串并调用适当的函数来解析它。

  2. 您通过在毫秒中添加尾随零来清理输入,使其可以被 fromisoformat 接受,就像您已经在修复时区所做的那样。你可以这样做:

    datetime.datetime.fromisoformat(date_str.replace("Z",".000000+00:00"[len(date_str)-20:]))
    

    这将适用于您的所有 3 种格式,以及毫秒精度的其他一些变体。尽管在代码审查中我会拒绝这种方法,因为我认为它很脆弱。

  3. 如果您想要一个足够灵活的解析器来自行处理输入中的微小变化,那么,这就是 dateutil 的用途。

必须具有处理任意非标准格式的灵活性。要么自己写,要么导入。

我会反对 dateutil 我可以编写的任何实现,因为它一定会更好地处理我不期望的输入。但你可能会得出不同的结论。