您的位置:首页 > 编程语言 > Python开发

python中的时间函数编写

2016-01-15 18:40 781 查看
#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

>>> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: