用timedelta做时间运算,包括加减乘除,甚是方便。timedelta精度从天到毫秒。本文结合实例介绍timedelta的用法。
1. 一个实例
先来个实例。假设我有公共交通的时刻表,包含车辆进站和出站的时刻(A表示departure, D表示arrival),如下:
#Station Line A/D Time
Arènes T1 A 05:27:00
Arènes 64 D 05:30:00
Arènes T2 D 05:35:00
Arènes T1 A 05:38:00
Arènes T1 D 05:45:00
Arènes 65 D 05:55:00
现在想算某条线路(如34路车)在某个站点一天停留多少时间。这难免需要对时间进行加减运算。Python的timedelta可以很好地做到这一点。
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) # 注意参数的顺序
# A duration expressing the difference between two date, time, or datetime instances to microsecond resolution. Arguments may be integers or floats, and may be positive or negative.
2. 字符串转换成timedelta
将上述形如“05:55:00”(我在数据库保存为字符串)转换成timedelta:
from datetime import timedelta
def convert2timedelta(s):
"""convert string, like 00:00:00, to timedelta"""
tm = map(int, s.split(':'))
return timedelta(hours=tm[0], minutes=tm[1], seconds=tm[2]) # convert to timedelta
Python3支持的操作很丰富,包括+, -, *, /, //, %, divmod
。除此之外,timedelta是hashable(作为字典的key),还可以进行比较==, !=
。
3. timedelta
timedelta属性和方法如下:
str(tm) # 返回的格式是:[D day[s], ][H]H:MM:SS[.UUUUUU], 如'1 day, 5:05:06.000001'
timedelta.total_seconds() # 返回总的秒数,等同于td / timedelta(seconds=1)
timedelta.min # 最小值,'-999999999 days, 0:00:00'
timedelta.max # 最大值,'999999999 days, 23:59:59.999999'
timedelta.resolution # 精度,0:00:00.000001
repr(tm) # 返回的格式是:datetime.timedelta(D[, S[, U]]),如'datetime.timedelta(1, 18306, 1)'