下面的代码是根据业务需求整理的几个处理日期的方法。
import datetime
class DateTime(object):
def __init__(self, input_date):
self.input_date = input_date
# input_date 的前一天
# 例如:输入的input_date = datetime.datetime(2018, 1, 17),输出的结果为20180116
def getYesterday(self):
date = self.input_date - datetime.timedelta(days=1)
yesterday = date.strftime('%Y%m%d')
#print(yesterday)
return yesterday
# input_date 的年月
# 例如:输入的input_date = datetime.datetime(2018, 1, 17),输出的结果为201801
def getMonth(self):
month = self.input_date.strftime('%Y%m')
#print(month)
return month
# input_date 的上个月
# 例如,输入的input_date = datetime.datetime(2018, 1, 17),输出结果为201712
def getLastMonth(self):
month = self.input_date.month
year = self.input_date.year
if(month == 1):
month = 12
year = year - 1
else:
month = month - 1
day = datetime.datetime(year, month, 1)
last_month = day.strftime('%Y%m')
#print(last_month)
return last_month
# input_date 的本月的第一天
# 例如:输入的input_date = datetime.datetime(2018, 1, 17),输出的结果为20180101
def getMonth1stday(self):
month = self.input_date.month
year = self.input_date.year
month1stday = datetime.datetime(year, month, 1)
month1stday = month1stday.strftime('%Y%m%d')
#print(month1stday)
return month1stday
# input_date 的当月的第N天
# 例如:输入的input_date = datetime.datetime(2018, 1, 17),n = 3, 输出的结果为20171203
def getMonthNday(self, n):
month = self.input_date.month
year = self.input_date.year
monthNday = datetime.datetime(year, month, 1)
monthNday = monthNday + datetime.timedelta(days=(n-1))
monthNday = monthNday.strftime('%Y%m%d')
#print(monthNday)
return monthNday
# input_date 的上月的第N天
# 例如:输入的input_date = datetime.datetime(2018, 1, 17),输出结果为20180101
def getLastMonthNday(self, n):
month = self.input_date.month
year = self.input_date.year
if(month == 1):
month = 12
year = year - 1
else:
month = month - 1
lastMonthNday = datetime.datetime(year, month, 1)
lastMonthNday = lastMonthNday + datetime.timedelta(days=(n-1))
lastMonthNday = lastMonthNday.strftime('%Y%m%d')
#print(lastMonthNday)
return lastMonthNday
# 如果input_date的天的数字大于等于输入的n,则输出input_date的年月和n日.如果input_date的天的数字小于输入的n,则输出input_date的上个月和n日
# 例如:我们输入input_date = datetime.datetime(2018, 1, 17),n = 12, 则输出结果为20180112
# 我们如果输入input_date = datetime.datetime(2018, 1, 17), n = 22, 则输出结果为20171222
def getAccountday(self, n):
month = self.input_date.month
year = self.input_date.year
today_day = self.input_date.day
#today = datetime.datetime.today()
#today_day = today.day
if(today_day >= n):
accountday = datetime.datetime(year, month, 1)
accountday = accountday + datetime.timedelta(days=(n-1))
accountday = accountday.strftime('%Y%m%d')
else:
if(month == 1):
month = 12
year = year - 1
else:
month = month - 1
accountday = datetime.datetime(year, month, 1)
accountday = accountday + datetime.timedelta(days=(n-1))
accountday = accountday.strftime('%Y%m%d')
#print(accountday)
return accountday
# 如果input_date的天的数字小于等于输入的n,则输出input_date的前一天;如果input_date的天的数字小于n,则输出input_date的年月和n-1日。
# 例如:我们输入input_date = datetime.datetime(2018, 1, 17),n = 12, 则输出结果为20180111
# 我们如果输入input_date = datetime.datetime(2018, 1, 17), n = 22, 则输出结果为20180116
def getLastDLday(self, n):
month = self.input_date.month
year = self.input_date.year
#today = datetime.datetime.today()
today_day = self.input_date.day
if(today_day <= n):
lastDLday = self.getYesterday()
else:
lastDL1stday = datetime.datetime(year, month, 1)
lastDLday = lastDL1stday + datetime.timedelta(days=(n-2))
lastDLday = lastDLday.strftime('%Y%m%d')
#print(lastDLday)
return lastDLday
# 如果input_date的天数-1等于n,则输出input_date的年月和n-1日;如果input_date的天数不等于n,则输出input_date的前一天
# 例如:输入input_date = datetime.datetime(2018, 1, 13),n = 12, 则输出20180111
# 输入的input_date = datetime.datetime(2018, 1, 16), n = 22, 则输出20180115
def getDLday(self, n):
month = self.input_date.month
year = self.input_date.year
today_day = self.input_date.day
if((today_day - 1) == n):
DL1stday = datetime.datetime(year, month, 1)
DLday = DL1stday + datetime.timedelta(days=(n-2))
DLday = DLday.strftime('%Y%m%d')
else:
DLday = self.getYesterday()
#print(DLday)
return DLday
if __name__ == '__main__':
input_date = datetime.datetime(2018, 1, 17)
date = DateTime(input_date)
date.getLastMonthNday(12)
date.getLastMonth()
date.getMonth1stday()
date.getAccountday(12)
date.getMonthNday(12)
date.getLastMonthNday(3)
date.getYesterday()
date.getDLday(22)
date.getLastDLday(22)
后续更新中。。。。