datetime基本日期和时间类型的timedelta对象详解(21) – Python语言(必读进阶学习教程)(参考资料)
timedelta
对象
timedelta 对象表示持续时间,即两个日期或时间之间的差异。
- class
datetime.
days=0timedelta(
seconds=0,
microseconds=0,
milliseconds=0,
minutes=0,
hours=0,
weeks=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.
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 |
t2和t3的总和。之后t1 – t2 == t3和t1 – t3 == t2为真。(1) |
t1 = t2 - t3 |
t2和t3的差异。之后t1 == t2 – t3和t2 == 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)T2由T3。返回一个 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 // t2 r= t1 % t2 timedelta |
+t1 |
返回timedelta 具有相同值的对象。(2) |
-t1 |
相当于 timedelta ( – t1.days, – t1.seconds, –t1.microseconds)和t1 * -1。(1)(4) |
abs(t) |
相当于+ t时,和-t时。(2)t.days >= 0 t.days < 0 |
str(t) |
返回表单中的字符串 ,其中D为负数。(5)[D day[s], ][H]H:MM:SS[.UUUUUU] t |
repr(t) |
返回timedelta 对象的字符串表示形式, 作为具有规范属性值的构造函数调用。 |
笔记:
-
这是确切的,但可能会溢出。
-
这是确切的,不能溢出。
-
除以0加注
ZeroDivisionError
。 -
– timedelta.max不能表示为
timedelta
对象。 -
timedelta
对象的字符串表示与其内部表示类似地进行规范化。这导致负时间点的某种不寻常的结果。例如:>>> timedelta(hours=-5) datetime.timedelta(days=-1, seconds=68400) >>> print(_) -1 day, 19:00:00
-
表达式总是等于表达式,除非t3等于; 在这种情况下,前者将产生结果,而后者将溢出。
t2 - t3
t2 + (-t3)
timedelta.max
除了上面列出的操作外,timedelta
对象还支持使用date
和datetime
对象进行某些添加和减少(参见下文)。
版本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