15.4.1 timedelta 数据类型

datetime 模块还提供了 timedelta 数据类型,它表示一段时间,而不是一个时刻。
在交互式环境中输入以下代码:


➊  >>>  delta  =  datetime.timedelta(days=11,  hours=10,  minutes=9,  seconds=8)
➋  >>>  delta.days,  delta.seconds,  delta.microseconds
(11,  36548,  0)
>>>  delta.total_seconds()
986948.0
>>>  str(delta)
'11  days,  10:09:08'

要创建 timedelta 对象,就用 datetime.timedelta()函数。datetime.timedelta()函数接受关键字参数 
weeks、days、hours、minutes、seconds、milliseconds 和 microseconds。没有 month 和 year 
关键字参数,因为“月”和“年”是可变的时间,依赖于特定月份或年份。timedelta 对象拥有的总时间以天、秒、微秒来表示。这些数字分别保存在 days、seconds 和 microseconds 
属性中。total_seconds()方法返回只以秒表示的时间。将一个 timedelta 对象传入 str(),将返回格式良好的、人类可读的字符串表示。
在这个例子中,我们将关键字参数传入 datetime.delta(),指定 11 天、10 小时、 9 分和 8 秒的时间,将返回的 timedelta 对象保存在 delta 
中➊。该 timedelta 对象的 days 属性为 11,seconds 属性为 36548(10 小时、9 分钟、8 秒,以秒表示)➋。调


用total_seconds()告诉我们,11 天、10 小时、9 分和 8 秒是 986948 秒。最后,将这个
timedelta 对象传入 str(),返回一个字符串,明确解释了这段时间。
算术运算符可以用于对 datetime 值进行日期运算。例如,要计算今天之后 1000
天的日期,在交互式环境中输入以下代码:
>>>  dt  =  datetime.datetime.now()
>>>  dt
datetime.datetime(2015,  2,  27,  18,  38,  50,  636181)
>>>  thousandDays  =  datetime.timedelta(days=1000)
>>>  dt  +  thousandDays
datetime.datetime(2017,  11,  23,  18,  38,  50,  636181)
首先,生成表示当前时刻的 datetime 对象,保存在 dt 中。然后生成一个timedelta对象,表示 1000 天,保存在 thousandDays 中。dt 与 thousandDays 
相加,得到一个 datetime 对象,表示现在之后的 1000 天。Python 将完成日期运算,弄清楚 2015 年 2 月 27 日之后的 1000 天,将是 2017 年 11 月 23 
日。这很有用,因为如果要从一个
给定的日期计算 1000  天之后,需要记住每个月有多少天,闰年的因素和其他棘手的细节。datetime 模块为你处理所有这些问题。
利用+和-运算符,timedelta 对象与 datetime 对象或其他 timedelta 对象相加或相减。利用*和/运算符,timedelta  
对象可以乘以或除以整数或浮点数。在交互式环境中输入以下代码:


➊  >>>  oct21st  =  datetime.datetime(2015,  10,  21,  16,  29,  0)
➋  >>>  aboutThirtyYears  =  datetime.timedelta(days=365  *  30)
>>>  oct21st
datetime.datetime(2015,  10,  21,  16,  29)
>>>  oct21st  -  aboutThirtyYears
datetime.datetime(1985,  10,  28,  16,  29)
>>>  oct21st  -  (2  *  aboutThirtyYears)
datetime.datetime(1955,  11,  5,  16,  29)

这里,我们生成了一个 DateTime 对象,表示 2015 年 10 月 21 日➊,以及一个 timedelta 对象,表示大约 30 年的时间(我们假设每年为 365 
天)➋。从 oct21st 中减去 aboutThirtyYears,我们就得到一个 datetime 对象,表示 2015 年 10 月 21 日前 30年的一天。从 
oct21st 中减去 2 * aboutThirtyYears,得到一个 datetime 对象,表示 2015年 10 月 21 日之前 60 年的一天。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞哥软件自习室

希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值