具有负值的 Python timedelta 对象

Soh*_*oqi 4 python python-datetime

我不太明白如何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)
Run Code Online (Sandbox Code Playgroud)

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

>>> 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) 
Run Code Online (Sandbox Code Playgroud)

根据我的理解,秒和微秒的推导如下:

  • 秒 = 86399 - (-60-3600-1)
  • 微秒 = 999999 - (-1-1000)

这样对吗?为什么天数等于 -9?

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

cha*_*ore 5

由于 timedeltas 在内部存储的方式,只有days属性可以采用负值。当 timedelta 被打印回来时,这可能会令人惊讶。文档中的一个有启发性的例子

>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
Run Code Online (Sandbox Code Playgroud)

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

  • “datetime”包设计得很糟糕.. (2认同)

abc*_*ccd 4

这是完全有道理的,(-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+ 小时。查看strthetimedelta可以帮助您更好地理解负数的timedelta表示方式。