最近由于公司前端任务不多,所以参与下后端python的开发。发现这个挺实用的时间计算api–timedelta,感觉以后会经常用到,在此记录一下以便后续温习。
业务需求上经常要算到多久时间后,如果是一两个小时,可以自己通过写判断语句,原时间加上相差的几个小时,多的就天数加一。但是如果是100个小时,100天呢?或者300天前是几月几号?
这里引入datetime模块中的timedelta,构造函数
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
timedelta对象可以理解为时间差,通过构造函数的传参,把100小时、100天转换成可以让datetime或者date直接加减的时间差。其中取值范围如下:
0 <= microseconds < 1000000
0 <= seconds < 3600*24 (the number of seconds in one day)
-999999999 <= days <= 999999999
举个实例计算100天后:
now = datetime.now()
day_difference = timedelta(days=100)
now = now + day_difference
print now.strftime('%Y-%m-%d')
稍作修改写成工具类(这里偷懒引用下同事写的工具类):
def timedelta(sign, dt, value):
"""
对指定时间进行加减运算,几秒、几分、几小时、几日、几周、几月、几年
sign: y = 年, m = 月, w = 周, d = 日, h = 时, n = 分钟, s = 秒
dt: 日期,只能是datetime或datetime.date类型
value: 加减的数值
return: 返回运算后的datetime类型值
"""
if not isinstance(dt, datetime.datetime) and not isinstance(dt, datetime.date):
raise Exception("日期类型错误")
if sign == 'y':
year = dt.year + value
if isinstance(dt, datetime.date):
return datetime.datetime(year, dt.month, dt.day)
elif isinstance(dt, datetime.datetime):
return datetime.datetime(year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond)
else:
return None
elif sign == 'm':
year = dt.year
month = dt.month + value
### 如果月份加减后超出范围,则需要计算一下,对年份进行处理 ###
# 如果月份加减后等于0时,需要特殊处理一下
if month == 0:
year = year - 1
month = 12
else:
# 对年月进行处理
year = year + month // 12
month = month % 12
if isinstance(dt, datetime.date):
return datetime.datetime(year, month, dt.day)
elif isinstance(dt, datetime.datetime):
return datetime.datetime(year, month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond)
else:
return None
elif sign == 'w':
delta = datetime.timedelta(weeks=value)
elif sign == 'd':
delta = datetime.timedelta(days=value)
elif sign == 'h':
delta = datetime.timedelta(hours=value)
elif sign == 'n':
delta = datetime.timedelta(minutes=value)
elif sign == 's':
delta = datetime.timedelta(seconds=value)
else:
return None
return dt + delta
这里推荐下部门老大的python教程我的第一个python web开发框架
http://www.cnblogs.com/EmptyFS/p/5208498.html
工具类代码摘自里面。