python解析`iso8601`时间或时间

2022-05-21 07:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要改变信仰

来自

str的列表

名单

  • 要么是datetime.datetime
  • 或者一个datetime.datetime加上一个datetime.timedelta

输入列表包含ISO_8601(wikipedia)格式的字符串。字符串可以是日期或时间间隔。我提出的解决方案如下:

import dateutil.parser

result = []
for str_ in input_list:
    if not is_time_interval_str(str_):
        result.append(dateutil.parser.parse(str_))
    else:
        result.append(parse_time_interval(str_))

我一直使用的是两个函数is_time_interval_strparse_time_interval。我已经找到了实现时间间隔解析的python包,但是还没有找到。我查过了

  1. dateutil.parser
  2. pyiso8601
  3. isodate
  4. arrow
  5. ciso8601
  6. iso8601utils(声明支持时间间隔,但只支持部分时间间隔)
  7. maya(提供了功能,但实现有缺陷)
  8. pendulum(声明支持时间间隔,但只支持部分时间间隔)

有些可以解析持续时间,比如PnYnMnDTnHnMnS,但是没有一个可以解析时间间隔,比如<start>/<end>。 6、7和8.也可以部分地使用<start>/<end>,但它们都不能使用部分<end>描述(例'2007-01-10/27'

我考虑过编写自己的字符串解析器,但它认为像ISO_8601的实现这样的基本东西应该由上面的一个包合并

问题

  1. 我应该用map(dateutil.parser.parser, str_.split("/"))之类的东西来编写自己的字符串解析器吗
  2. 有任何python包能够解析ISO_8601的时间间隔吗
  3. 我见过使用数据库引擎将str转换为datetime.datetime的解决方案,这是时间间隔的一个选项吗

Tags: 字符串parser列表datetime间隔timeparse时间isoresult解决方案enddateutilintervalstr