#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
>>>
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
>>>