我不太清楚如何解释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部分。但仍然不太了解使用负值的工作。请分享说明或相关文档链接。谢谢:))
答案 0 :(得分:2)
完全合理,(-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小时以上。查看str
的{{1}}可以帮助您更好地了解负timedelta
的表示方式。
答案 1 :(得分:1)
由于时间增量是在内部存储的,因此只有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