“未完成的间隔”可以用 datetime 表示(并且可能将其子类化以包含一个标志 start 或 end) - 这就是我要快速实现的方法。
当你有间隔对应的结束或开始时),使用它们的差异获取timedelta:
>>> from datetime import datetime, timedelta
# represent infinite time from 1/1/2014 onwards
>>> start = datetime(2014, 1, 1)
# stop that time
>>> end = datetime(2015, 1, 1)
>>> interval = end - start
>>> interval
datetime.timedelta(365)
如果您有时间以“正确的方式”执行此操作,您可以创建一个具有两个 datetime 对象(开始和结束)的特殊 timedelta 类。如果其中一个缺失,您可以假设它是一个无限的 timedelta 并将其视为这样。
例子:
from datetime import timedelta, datetime
class SpecialTimedelta(object):
def __init__(self, start=None, end=None):
self.start = start
self.end = end
if start and not isinstance(start, datetime):
raise TypeError("start has to be of type datetime.datetime")
if end and not isinstance(start, datetime):
raise TypeError("end has to be of type datetime.datetime")
def timedelta(self):
if not (self.start and self.end):
# possibly split cases
return "infinite"
# alternatives:
# return self.start or self.end
# raise OverflowError("Cannot quantiate infinite time with timedelta")
return self.end - self.start
print SpecialTimedelta(datetime(1986, 1, 1), datetime(2015, 1, 1)).timedelta()
# out: 10592 days, 0:00:00
print SpecialTimedelta(datetime(1986, 1, 1)).timedelta()
# out: infinite