如何在Python中解析和比较ISO 8601持续时间?

如何在Python中解析和比较ISO 8601持续时间?,第1张

概述我正在寻找一个 Python(v2)库,这将允许我解析和比较可能在不同单位的ISO 8601持续时间 理想情况下,它可以与标准运算符一起使用(a< b)但是我会很喜欢a.compare(b)或者. 像这样的东西: duration('P23M') < duration('P2Y') //Trueduration('P25M') < duration('P2Y') //False 我已经安装了来自 我正在寻找一个 Python(v2)库,这将允许我解析和比较可能在不同单位的ISO 8601持续时间

理想情况下,它可以与标准运算符一起使用(a< b)但是我会很喜欢a.compare(b)或者. 像这样的东西:

duration('P23M') < duration('P2Y') //Trueduration('P25M') < duration('P2Y') //False

我已经安装了来自PyPi的isodate,但是它有自己的类,包括月份和年份,并且它们与自己或timedeltas都没有比较

解决方法 这里有一点点持续时间(一个月是30天,一年是平均等):

# parse 8601 durationfrom re import findalldef iso8601_duration_as_seconds( d ):    if d[0] != 'P':        raise ValueError('Not an ISO 8601 Duration string')    seconds = 0    # split by the 'T'    for i,item in enumerate(d.split('T')):        for number,unit in findall( '(?P<number>\d+)(?P<period>S|M|H|D|W|Y)',item ):            # print '%s -> %s %s' % (d,number,unit )            number = int(number)            this = 0            if unit == 'Y':                this = number * 31557600 # 365.25            elif unit == 'W':                 this = number * 604800            elif unit == 'D':                this = number * 86400            elif unit == 'H':                this = number * 3600            elif unit == 'M':                # ambiguity ellivated with index i                if i == 0:                    this = number * 2678400 # assume 30 days                    # print "MONTH!"                else:                    this = number * 60            elif unit == 'S':                this = number            seconds = seconds + this    return secondsfor d in [ 'PT10M','PT5H','P3D','PT45S','P8W','P7Y','PT5H10M','P2YT3H10M','P3Y6M4DT12H30M5S','P23M','P2Y' ]:    seconds = iso8601_duration_as_seconds( d )    print "%s \t= %s" % (d,seconds)    printprint '%s' % (iso8601_duration_as_seconds('P23M') < iso8601_duration_as_seconds('P2Y') )# Trueprint '%s' % (iso8601_duration_as_seconds('P25M') < iso8601_duration_as_seconds('P2Y') )# False
总结

以上是内存溢出为你收集整理的如何在Python中解析和比较ISO 8601持续时间?全部内容,希望文章能够帮你解决如何在Python中解析和比较ISO 8601持续时间?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193179.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存