Python学习笔记:timedelta类相关函数

一、介绍

timedelta 类表示时间差,可以直接实例化,也可以由两个 datetime 类型的数据作差得到。

缘起于求两个时间差,并需要转换为特定的单位(天、小时、分钟等),遂产生此需求。

二、导入

导入具体模块为:

from datetime import timedelta

参数为:

# days seconds microseconds milliseconds minutes hours weeks

# 实例化
td = timedelta(days=1, hours=8)
# datetime.timedelta(days=1, seconds=28800)

print(td)
# 1 day, 8:00:00

通过以下可以查看相应属性和方法。

dir(timedelta)
'''
['__abs__',
 '__add__',
 '__bool__',
 '__class__',
 '__delattr__',
 '__dir__',
 '__divmod__',
 '__doc__',
 '__eq__',
 '__floordiv__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__neg__',
 '__new__',
 '__pos__',
 '__radd__',
 '__rdivmod__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rfloordiv__',
 '__rmod__',
 '__rmul__',
 '__rsub__',
 '__rtruediv__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '__truediv__',
 'days',
 'max',
 'microseconds',
 'min',
 'resolution',
 'seconds',
 'total_seconds']
'''

三、实例

# 导入模块
from datetime import timedelta, datetime

begin_time = '2022-11-20 23:16:00'
end_time = '2022-11-25 15:16:17'

# 转换为时间格式
begin_time = datetime.strptime(begin_time, '%Y-%m-%d %H:%M:%S')
end_time = datetime.strptime(end_time, '%Y-%m-%d %H:%M:%S')

# 求时间差
print(end_time - begin_time)
# 4 days, 16:00:17

1.days 天数

返回时间差的天数。

(end_time - begin_time).days # 4

2.seconds 秒数

返回时间差的秒数。

注意:此秒数并非整体时间差,而是时间部分的秒数!

(end_time - begin_time).seconds # 57617

3.microseconds 毫秒数

返回时间差的毫秒数。

(end_time - begin_time).microseconds # 0
# 因为原始数据没有毫秒

dayssecondsmicroseconds 输出的是时间差对应位置的分量,而不是讲时间差转换单位的结果。

4.min 下限

返回时间差的下限(无论timedelta对象是什么返回都一样)。

(end_time - begin_time).min # datetime.timedelta(days=-999999999)

print((end_time - begin_time).min) # -999999999 days, 0:00:00

5.max 上限

返回时间差的上限(无论timedelta对象是什么返回都一样)。

(end_time - begin_time).max #  datetime.timedelta(days=999999999, seconds=86399, microseconds=999999)

print((end_time - begin_time).max) # 999999999 days, 23:59:59.999999

6.resolution 精度

返回时间差的精度。

(end_time - begin_time).resolution # datetime.timedelta(microseconds=1)

print((end_time - begin_time).resolution) # 0:00:00.000001

7.total_seconds 总秒数

toal_secondstimedelta 对象的唯一一个方法。

将时间差转换为秒的单位进行返回。

后续如需转换为其他单位需自行乘以相应的系数。

(end_time - begin_time).total_seconds() # 403217.0

工作中常在数据框中进行转换。

# 转换单位
data['时间_diff_day'] = data['时间_diff'].map(lambda x: x.days)
data['时间_diff_second'] = data['时间_diff'].map(lambda x: x.total_seconds())
data['时间_diff_hour'] = data['时间_diff_second'] / 3600

注意 total_seconds 为方法,需要加括号,其他为属性,无须添加括号。

参考链接:【Python】timedelta类详解

参考链接:datetime.timedelta类介绍

posted @ 2022-11-20 23:40  Hider1214  阅读(671)  评论(0编辑  收藏  举报