????????timedelta是Python的datetime模块中的一个类,主要用于计算两日期或时间之间的差异。
? ? ? ? 这个类可以用来进行日期的算术计算,以及大小比较。
????????timedelta?对象表示两个 date 或者 time 的时间间隔。
语法:
class?datetime.timedelta(days=0,?seconds=0,?microseconds=0,?milliseconds=0,?minutes=0,?hours=0,?weeks=0)
所有参数都是可选的并且默认为?0。 这些参数可以是整数或者浮点数,也可以是正数或者负数。
millisecond: 毫秒,千分之一秒,即0.001秒。
microsecond: 微秒,百万分之一秒,即0.000001秒
nanosecond: 纳秒,十亿分之一秒,1ns = 10-9s
只有?days,?seconds?和?microseconds?会存储在内部。 参数单位的换算规则如下:
1毫秒会转换成1000微秒。
1分钟会转换成60秒。
1小时会转换成3600秒。
1星期会转换成7天。
日期、秒、微秒都是标准化的,所以它们的表达方式也是唯一的,例:
0?<=?microseconds?<?1000000
0?<=?seconds?<?3600*24?(一天的秒数)
-999999999?<=?days?<=?999999999
下面的例子演示了如何对?days,?seconds?和?microseconds?以外的任意参数执行“合并”操作并标准化为以上三个结果属性:
示例:
import datetime
delta = datetime.timedelta(days=50,seconds=27,microseconds=10,milliseconds=29000,minutes=5,hours=8,weeks=2)
print(delta) # 输出:64 days, 8:05:56.000010
在有任何参数为浮点型并且 microseconds 值为小数的情况下,从所有参数中余下的微秒数将被合并,并使用四舍五入偶不入奇的规则将总计值舍入到最接近的整数微秒值。 如果没有任何参数为浮点型的情况下,则转换和标准化过程将是完全精确的(不会丢失信息)。
如果标准化后的 days 数值超过了指定范围,将会抛出?OverflowError?异常。
注意
如果对负数值进行标准化的可能会出现预料之外的结果,例:
import datetime
d = datetime.timedelta(microseconds=-1)
print(d) # 输出:-1 day, 23:59:59.999999
例:
import datetime
print(datetime.timedelta.min) #?输出:-999999999 days, 0:00:00 约-9.9亿天
例:
import datetime
print(datetime.timedelta.max) # 输出:999999999 days, 23:59:59.999999
9.999999999亿天,约274万年
两个不相等的?timedelta?类对象最小的间隔为?timedelta(microseconds=1)。
例:
from datetime import date, timedelta ?
??
print(timedelta.resolution) # 输出:0:00:00.000001,100万分之1秒
注意:
因为标准化的缘故,timedelta.max?>?-timedelta.min,-timedelta.max?不可以表示一个?timedelta?类对象。
属性 | 值 |
days | -999999999 至 999999999 ,含999999999 |
seconds | 0 至 86399,包含86399 |
microseconds | 0 至 999999,包含999999 |
例:
from datetime import timedelta ?
today = timedelta(days=1,seconds=1,milliseconds=1,minutes=1)
??
print(today.days) # 输出:1
print(today.seconds) # 输出:61
print(today.microseconds)# 输出:1000
例:
import datetime
one_year = datetime.timedelta(days=365)
d1 = datetime.timedelta(days=364)
plus = one_year + d1 # 输出:729 days, 0:00:00
one_day = one_year - d1 # 输出:1 day, 0:00:00
ten_year = one_year * 10 # 输出:3650 days, 0:00:00
five_year = ten_year / 2 # 输出:1825 days, 0:00:00
3.2 新版功能.
例:
import datetime
d1 = datetime.timedelta(days=1)
print(datetime.timedelta.total_seconds(d1)) # 输出:86400.0
需要注意的是,时间间隔较大时,这个方法的结果中的微秒将会失真(大多数平台上大于270年视为一个较大的时间间隔)。
最新介绍可参考官方文档:datetime --- 基本日期和时间类型 — Python 3.12.1 文档