检查可以持续时间或timedelta的变量是否大于0?

时间:2018-09-12 08:05:12

标签: python isodate

我正在使用isodate将isoformat的持续时间解析为日期:

>>> isodate.parse_duration("P1M")
isodate.duration.Duration(0, 0, 0, years=0, months=1)

>>> isodate.parse_duration("P1D")
datetime.timedelta(1)

将月解析为duration个对象,将天解析为timedelta个对象,如文档中所述:https://pypi.org/project/isodate/

我想测试可以为duration类型或timedelta类型的变量的值是否大于0。适用于duration类型的方法没有适用于timedelta类型,反之亦然。

>>> isodate.parse_duration("P1M") > 0
True

>>> isodate.parse_duration("P1D") > 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't compare datetime.timedelta to int



>>> isodate.parse_duration("P1M") > timedelta.min
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't compare datetime.timedelta to Duration

>>> isodate.parse_duration("P1D") > timedelta.min
True    

对此有什么好的解决方案?

2 个答案:

答案 0 :(得分:0)

检查变量实例是datetime.timedalta还是Duration:

def is_larger_than_0(duration):
    if isinstance(duration, datetime.timedelta):
        if duration > datetime.timedelta.min:
            return True
    elif isinstance(duration, Duration):
        if duration > 0:
            return True
    return False

答案 1 :(得分:0)

您应该定义一个函数,然后对每种类型应用适当的方法:

def is_greater_than_zero(duration):
  if type(duration) is isodate.duration.Duration:
    return duration > 0
  elif type(duration) = 'datetime.timedelta':
    return duration > timedelta.min

is_greater_than_zero(duration)