该模块实现了 ISO 8601 日期、时间和持续时间解析。 该实现遵循 ISO8601:2004 标准,并且仅实现 标准中提到的日期/时间表示。如果某项未在此提及, 则将其视为不存在,而不是允许的选项。
例如,ISO8601:2004 从未提及 2 位年份。因此, 该模块无意支持 2 位年份。(尽管它仍然可以是有效的 ISO 日期,因为并未明确禁止。) 另一个例子是,当时间没有提供时区信息时, 则应将其解释为本地时间,而不是 UTC。
由于该模块将 ISO 8601 日期/时间映射到标准的 Python 数据类型,如 date、time、datetime 和 timedelta, 因此不可能转换所有可能的 ISO 8601 日期/时间。例如,Python 的 date 和 datetime 类不允许 0001-01-01 之前的日期。 此外,小数秒仅限于微秒。这意味着如果解析器发现 例如纳秒,它将向下舍入到微秒。
- 以下解析方法可用。
- parse_time:
- 将 ISO 8601 时间字符串解析为 time 对象
- parse_date:
- 将 ISO 8601 日期字符串解析为 date 对象
- parse_datetime:
- 将 ISO 8601 日期-时间字符串解析为 datetime 对象
- parse_duration:
- 将 ISO 8601 持续时间字符串解析为 timedelta 或 Duration 对象。
- parse_tzinfo:
- 将 ISO 8601 字符串的时区信息部分解析为 tzinfo 对象。
由于 ISO 8601 允许以年和月定义持续时间,而 timedelta 不处理年和月,因此该模块提供了一个 Duration 类, 它几乎可以像 timedelta 对象一样使用(有一些限制)。 但是,Duration 对象可以转换为 timedelta 对象。
所有支持的数据类型也都有 ISO 格式化方法。每个 xxx_isoformat 方法都接受一个 format 参数。默认格式 始终是 ISO 8601 扩展格式。这与 datetime.isoformat 使用的格式相同:
- time_isoformat:
- 用于创建具有默认格式 hh:mm:ssZ 的 ISO 时间字符串。
- date_isoformat:
- 用于创建具有默认格式 yyyy-mm-dd 的 ISO 日期字符串。
- datetime_isoformat:
- 用于创建具有默认格式 yyyy-mm-ddThh:mm:ssZ 的 ISO 日期-时间字符串。
- duration_isoformat:
- 用于创建具有默认格式 PnnYnnMnnDTnnHnnMnnS 的 ISO 持续时间字符串。
- tz_isoformat:
- 用于创建具有默认格式 hh:mm 的 ISO 时区字符串。
- strftime:
- 一个在很大程度上兼容 Python strftime 的重写,但是 仅支持那些也可用于 1900 年之前日期的格式字符串。此方法还 理解如何格式化 datetime 和 Duration 实例。
可以使用 Python 标准安装方法轻松安装此模块。
使用 pip install isodate。
- 解析器接受几种日期/时间表示,这些表示根据 ISO 8601 标准应为无效。
- 对于日期和时间组合,此解析器接受基本格式和扩展格式的混合。 例如,日期可以是基本格式,而时间可以接受扩展格式。 它还允许日期-时间字符串中的简短日期和时间。
- 对于不完整的日期,将选择第一天。例如,19 世纪结果日期为 1901-01-01。
- 负的 Duration 和 timedelta 值尚未完全支持。
docstring 和单元测试应提供有关 方法及其限制的详细信息。
源码发布包含一个 setup.py 脚本, 可用于运行包含的单元测试。
源代码可在 https://github.com/gweis/isodate 获取。