You are here:  Home » Python » datetime基本日期和时间类型的timedelta对象详解(21)Python语言(必读进阶学习教程)(参考资料)

timedelta对象

timedelta对象表示的持续时间,两个日期或时间之间的差。

class datetime.timedeltadays = 0seconds = 0microseconds = 0milliseconds = 0minutes = 0hours = 0weeks = 0 
所有参数都是可选的,默认为0。参数可以是整数或浮点数,也可以是正数或负数。

只有毫秒的内部存储。参数转换为这些单位:

  • 毫秒转换为1000微秒。
  • 一分钟转换为60秒。
  • 一小时转换为3600秒。
  • 一周转换为7天。

然后将天,秒和微秒标准化,以使表示具有唯一性

  • 0 <= microseconds < 1000000
  • 0 <= seconds < 3600*24 (一天中的秒数)
  • -999999999 <= days <= 999999999

如果任何参数是一个浮点数并且存在小数微秒,则将所有参数遗留的小数微秒组合在一起,并使用圆形半到偶数决胜局将它们的总和四舍五入到最接近的微秒。如果没有参数是浮点数,则转换和规范化过程是准确的(没有信息丢失)。

如果天数的标准化值超出指定范围, OverflowError则提高。

请注意,负值的标准化最初可能会令人惊讶。例如,

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

 

类属性是:

timedelta.min
最负面的timedelta对象,timedelta(-999999999)
timedelta.max
最积极的timedelta对象,。timedelta(days=999999999, hours=23, minutes=59, seconds=59,microseconds=999999)
timedelta.resolution
非平等timedelta物体之间可能存在的最小差异, timedelta(microseconds=1)

请注意,由于规范化,timedelta.max-timedelta.min。 -timedelta.max不能表示为timedelta对象。

实例属性(只读):

属性
days 介于-999999999和999999999之间
seconds 介于0和86399之间
microseconds 在0到999999之间

支持的操作:

手术 结果
t1 = t2 + t3 t2t3的总和。之后t1 – t2 == t3t1 – t3 == t2为真。(1)
t1 = t2 - t3 t2t3的差异。之后t1 == t2 – t3t2 == t1 + t3为真。(1)(6)
t1 = t2 * i or t1 = i * t2 Delta乘以整数。之后t1 // i == t2为真,提供。i != 0
通常,t1 * i == t1 *(i-1)+ t1 为真。(1)
t1 = t2 * f or t1 = f * t2 Delta乘以浮点数。使用round-half-to-even将结果舍入到timedelta.resolution的最接近的倍数。
f = t2 / t3 司(3)T2T3。返回一个 float对象。
t1 = t2 / f or t1 = t2 / i Delta除以float或int。使用round-half-to-even将结果舍入到timedelta.resolution的最接近的倍数。
t1 = t2 // i 要么 t1 = t2 // t3 计算最低限度,剩余(如果有的话)被丢弃。在第二种情况下,返回一个整数。(3)
t1 = t2 % t3 余数计算为 timedelta对象。(3)
q, r = divmod(t1, t2) 计算商和余数: (3)和。q是整数,r是 对象。q = t1 // t2r= t1 % t2timedelta
+t1 返回timedelta具有相同值的对象。(2)
-t1 相当于 timedelta( – t1.days, – t1.seconds, –t1.microseconds)和t1 * -1。(1)(4)
abs(t) 相当于+ t时,和-t时。(2)t.days >= 0t.days < 0
str(t) 返回表单中的字符串 ,其中D为负数。(5)[D day[s], ][H]H:MM:SS[.UUUUUU]t
repr(t) 返回timedelta对象的字符串表示形式, 作为具有规范属性值的构造函数调用。

笔记:

  1. 这是确切的,但可能会溢出。

  2. 这是确切的,不能溢出。

  3. 除以0加注ZeroDivisionError

  4. – timedelta.max不能表示为timedelta对象。

  5. timedelta对象的字符串表示与其内部表示类似地进行规范化。这导致负时间点的某种不寻常的结果。例如:

    >>> timedelta(hours=-5) 
    datetime.timedelta(days=-1, seconds=68400) 
    >>> print(_) 
    -1 day, 19:00:00

     

  6. 表达式总是等于表达式,除非t3等于; 在这种情况下,前者将产生结果,而后者将溢出。t2 - t3t2 + (-t3)timedelta.max

除了上面列出的操作外,timedelta对象还支持使用datedatetime 对象进行某些添加和减少(参见下文)。

版本3.2中更改:现在支持timedelta对象的 楼层划分和真正划分,timedelta其余操作和divmod()函数也是如此。现在支持timedelta对象对float对象的真正除法和乘法 。

timedelta对象的比较由timedelta表示较小持续时间的对象支持,该 持续时间被认为是较小的时间delta。为了阻止混合类型比较从对象地址回退到默认比较,当将timedelta对象与不同类型的对象进行TypeError比较时,除非比较为==或,否则引发比较!=。后一种情况分别返回False或 True

timedelta对象是可散列的(可用作字典键),支持高效的酸洗,并且在布尔上下文中,timedelta当且仅当它不等于时,才认为该对象为真timedelta(0)

实例方法:

timedelta.total_seconds
返回持续时间中包含的总秒数。相当于 。td / timedelta(seconds=1)

请注意,对于非常大的时间间隔(在大多数平台上大于270年),此方法将失去微秒精度。

版本3.2中的新功能。

用法示例:

>>> from datetime import timedelta 
>>> year = timedelta(days=365) 
>>> another_year = timedelta(weeks=40, days=84, hours=23, 
...                          minutes=50, seconds=600) # adds up to 365 days 
>>> year.total_seconds() 
31536000.0 
>>> year == another_year 
True 
>>> ten_years = 10 * year 
>>> ten_years, ten_years.days // 365 
(datetime.timedelta(days=3650), 10) 
>>> nine_years = ten_years - year 
>>> nine_years, nine_years.days // 365 
(datetime.timedelta(days=3285), 9) 
>>> three_years = nine_years // 3 
>>> three_years, three_years.days // 365 
(datetime.timedelta(days=1095), 3) 
>>> abs(three_years - ten_years) == 2 * three_years + year 
True