2

根据标题,我正在尝试解析包含xs:duration数据类型的 XML 文件。我想把它转换成一个 Pythontimedelta对象,然后我可以在进一步的计算中使用它。

有没有类似功能的内置方法strptime()?如果没有,实现这一目标的最佳方法是什么?

4

2 回答 2

5

这是一个老问题,但供将来参考:您可以使用isodate.parse_duration()它。它返回一个与 兼容的类timedelta

https://pypi.python.org/pypi/isodate

于 2015-05-16T01:17:05.760 回答
4

鉴于我已经有一个关于我在问题中提出的工作示例,为了完整起见,我将在此处发布。如果有更好的答案,我会接受。

period = '-P14D'
regex  = re.compile('(?P<sign>-?)P(?:(?P<years>\d+)Y)?(?:(?P<months>\d+)M)?(?:(?P<days>\d+)D)?(?:T(?:(?P<hours>\d+)H)?(?:(?P<minutes>\d+)M)?(?:(?P<seconds>\d+)S)?)?')

# Fetch the match groups with default value of 0 (not None)
duration = regex.match(period).groupdict(0)

# Create the timedelta object from extracted groups
delta = timedelta(days=int(duration['days']) + (int(duration['months']) * 30) + (int(duration['years']) * 365),
                  hours=int(duration['hours']),
                  minutes=int(duration['minutes']),
                  seconds=int(duration['seconds']))

if duration['sign'] == "-":
    delta *= -1

这有效,但不能正确处理月份长度或闰年。就我而言,这不是问题,但值得牢记。

于 2010-05-04T12:51:56.813 回答