如何将xs:duration数据类型解析为Python的datetime.timedelta对象?
根据标题,我正在尝试解析一个包含 xs:duration
数据类型的 XML 文件。我想把它转换成 Python 的 timedelta
对象,这样我就可以在后续的计算中使用它。
有没有什么内置的方法可以做到这一点,类似于 strptime()
函数?如果没有,最好的解决办法是什么呢?
2 个回答
5
这是一个老问题,但为了将来参考:你可以使用 isodate.parse_duration()
来解决这个问题。它会返回一个和 timedelta
兼容的类。
你可以查看这个链接了解更多信息:https://pypi.python.org/pypi/isodate
5
因为我已经有了一个能正常工作的例子,所以我在这里分享一下,以便让大家更完整地了解。如果有更好的答案出现,我会考虑接受。
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
这个方法可以用,但它不能正确处理每个月的天数或者闰年。对我来说这不是问题,但值得大家注意一下。