Python踩坑之路-datetime模块的timedelta应用

来源:互联网 发布:移动有网络机顶盒吗 编辑:程序博客网 时间:2024/05/20 06:55

最近由于公司前端任务不多,所以参与下后端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
工具类代码摘自里面。

原创粉丝点击