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

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

你可能感兴趣的:(python)