Python 具有负值的 timedelta 对象

Python timedelta object with negative values

我不太明白 datetime.timedelta 中的否定论点是如何解释的。

具有正值:

>>> from datetime import timedelta
>>> d = timedelta(days=1,seconds=1,microseconds=1,milliseconds=1,minutes=1,hours=1,weeks=1)
>>> (d.days, d.seconds, d.microseconds)
>>> (8, 3661, 1001)

这很简单。具有负值的类似示例如下所示:

>>> from datetime import timedelta
>>> d = timedelta(days=-1,seconds=-1,microseconds=-1,milliseconds=-1,minutes=-1,hours=-1,weeks=-1)
>>> (d.days, d.seconds, d.microseconds)
>>> (-9, 82738, 998999) 

根据我的理解,秒和微秒的派生方式如下:

这是正确的吗?天数怎么等于-9?

我正在阅读文档的 this 部分。但是仍然不太了解负值的工作。请分享解释或相关文档链接。谢谢:)

完全有道理,(-1 week + -1 day) + (-1 hours) + (-1 minutes) + (-1 seconds) + (-1 milliseconds) + (-1 microseconds)等于:(-8 days) + (-1 hours) + (-1 minutes) + (-1 seconds) + (-1 milliseconds) + (-1 microseconds)

如果少于 -8 天,有 -1 小时,-1 分钟,...天数必须甚至少于 -8 才能使小时、分钟、秒为负...转化为正的小时、分钟、秒……(因为只有天可以表示为负数,其他的,例如秒,总是表示为正数)。这意味着天数必须是 -9。

如果您打印 d ,您将得到 -9 days 22:58:58.998999,负 9 天和正 22+ 小时。查看 timedeltastr 可以帮助您更好地理解负面 timedelta 的表示方式。

由于时间增量的内部存储方式,只有 days 属性可以取负值。当打印回 timedelta 时,这可能会令人惊讶。一个illuminating example from the docs,

>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)

即。 -1d + 86399s + 999999µs = -1µs