python中的时间函数编写

#coding=utf-8
import calendar as cal
from datetime import datetime, timedelta


def trans_day(v_str):
    '''
    ---------------------------------------------------------
    @名称     --%@NAME:    trans_day
    @功能描述 --%@COMMENT: 将传入的格式为‘yyyymmdd’的字符串日期改为‘yyyy-mm-dd’的格式
    '''
    date = v_str
    year = date[:4]
    month = date[4:6]
    day = date[6:8]


    transday = '%s-%s-%s'%(year,month,day)
    return transday


print(trans_day('20150118'))


def  is_valid_date(v_str):
    '''
    ---------------------------------------------------------
    @名称     --%@NAME:    trans_day
    @功能描述 --%@COMMENT: 判断一个字符串是否是一个有效的日期
    '''
    try:
        datetime.strptime(v_str, '%Y%m%d')
        return True
    except:
        return False


print(is_valid_date('20150230'))




def last_day(v_str):
    '''
    ---------------------------------------------------------
    @名称     --%@NAME:    last_day
    @功能描述 --%@COMMENT: 根据传入的年月或者年月日信息得到传入月份的最后一天
    '''
    date = v_str
    year = int(date[:4])
    month = int(date[4:6])
    
    day = cal.monthrange(year, month)[-1]
    LastDay = '%s%s' % (date[:6], day)
    return LastDay


print(last_day('20160210'))


def next_day(v_str,day):
    '''
    @summary: 计算传入的日期的day天之后的日期
    @param: date 传入的日期
    '''
    date= v_str
    now = datetime.strptime(date[:8],'%Y%m%d')
   
    timedel = int(day)
    next_day = (now + timedelta(days=timedel)).strftime('%Y%m%d')
    return next_day


print(next_day('20160118','43'))


def pre_month(v_str,num=None):
    '''
    ---------------------------------------------------------
    @名称     --%@NAME:    pre_month
    @功能描述 --%@COMMENT: 根据传入的年月或者年月日格式的字符串型日期信息得到上一个月
    '''
    date=v_str
    if num is None: num = 1
    yy = num // 12
    mm = num % 12
    m = ('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12')
    month = date[4:6]
    year = date[:4]
        
    if int(month)-mm <= 0:
        month = m[(int(month)-mm+11)%12]
        year = int(year) - yy - 1
    else:
        month = m[int(month)-mm-1]
        year = int(year) - yy
    return '%s%s' % (year, month)


print(pre_month('20160310'))


def months_between(month,month2):
    '''
    ---------------------------------------------------------
    @名称     --%@NAME:    months_between
    @功能描述 --%@COMMENT: 计算传入的字符串类型的月份差
    ---------------------------------------------------------
    '''
    x = int(month[:6])
    y = int(month2[:6])
    return (x//100-y//100)*12+(x%100-y%100)


print(months_between('20160214','20160118'))


def pre_month_day(v_str,num=None):
    '''
    ---------------------------------------------------------
    @名称     --%@NAME:    pre_month
    @功能描述 --%@COMMENT: 根据传入的年月日信息得到上一个月同一天,若上月同一天不存在,则返回上月月末
    '''
    date=v_str
    pre_ymonth=pre_month(date)
    day=date[6:8]
    pre_ymd='%s%s'%(pre_ymonth,day)
    if is_valid_date(pre_ymd):
       premonthday=pre_ymd
    else:
       premonthday=last_day(pre_ymonth)


    return premonthday


print(pre_month_day('20160331',13))


结果如下:

>>> 
2015-01-18
False
20160229
20160301
201602
1
20160229
>>> 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值