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)
根据我的理解,秒和微秒的派生方式如下:
- 秒 =
86399 - (-60-3600-1)
- 微秒 =
999999 - (-1-1000)
这是正确的吗?天数怎么等于-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+ 小时。查看 timedelta
的 str
可以帮助您更好地理解负面 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
我不太明白 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)
根据我的理解,秒和微秒的派生方式如下:
- 秒 =
86399 - (-60-3600-1)
- 微秒 =
999999 - (-1-1000)
这是正确的吗?天数怎么等于-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+ 小时。查看 timedelta
的 str
可以帮助您更好地理解负面 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