一般金融产品的账务测试时,我们会接触到还款方式,到期还款日等概念。
在自动化测试或者脚本使用中,我们需要动态的生成到期还款日去进行账务测试,这篇文章主要介绍了常见的几种到期还款日计算方式。
一、固定期限(比如放款日后的30日)
二、放款日的对日( 假设1月5日放款,2月5日为还款日;假设1月31号放款,2月只有28天,28号为还款日;假设3月31号放款,4月30号为还款日;)
三、每月固定某一天作为还款日,比如:等本等息、等额本息、等额本金等贷款方式有这种类型;
下面附上对应的代码:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#文件:dealTime.py
#日期:2019-08-30
#备注:通过time和datetime模块对时间进行处理
1. 按日计息-固定期限还款-计算到期还款日(传入放款日期、固定期限天数)
2. 按月计息-每月对日还款-计算还款日期(传入放款日期、第N期)
3. 按月计息-每月固定日期还款-计算还款日期(传入放款日期、第N期)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
from datetime import datetime,timedelta,date
import time
import calendar
# 传入str类型计算到期还款日(按日计息)
def month_days(dt_str,num):
dt_time = datetime.strptime(dt_str, "%Y-%m-%d")
delta = timedelta(days=num)
n_days = (dt_time + delta).strftime('%Y-%m-%d')
print(n_days)
# 按月还款:ym_str-字符串格式放款日期; num-第N期; n_date-得到字符串类型还款日期
# (假设1月31号放款, 2月只有28天,28号为还款日;假设3月31号放款,4月30号为还款日; 假设4月5日放款,5月5日为还款日)
def date_calculate(ym_str,num):
ym_date = datetime.strptime(ym_str, "%Y-%m-%d")
s_year = ym_date.year
s_month = ym_date.month + num # 第N个月
s_day = ym_date.day
n_year = int((s_month-1)/12) # 对比12个月,计算年度
c_year = s_year +n_year
c_month = s_month-12*n_year
c_day = calendar.monthrange(c_year, c_month)[1] # 获取某月多少天:闰年(被4整除且不被100整除、或者被400整除)2月29天,否则28天
#print(type(days),days) # 第一个元素:这个月的第一天是星期几(0-6); 第二个元素:这个月的天数
if c_day>=s_day: # 如果当月天数小于借款日天数,取当月天数,否则取借款日天数
n_day = s_day
else:
n_day = c_day
n_date = date(c_year,c_month,n_day).strftime('%Y-%m-%d')
print(n_date)
return(n_date)
# 每月固定某天还款(开始日期,期数,到期还款日)
def date_fixed(ym_str,num,day):
ym_date = datetime.strptime(ym_str, "%Y-%m-%d")
s_year = ym_date.year # 起始、年
s_month = ym_date.month + num # 第N个月
n_year = int((s_month-1)/12) # 对比12个月,如果跨年,进一
c_year = s_year +n_year
c_month = s_month-12*n_year
n_date = date(c_year, c_month, day).strftime('%Y-%m-%d')
#print(n_date)
return (n_date)
举例:第一种类型-->
第二种类型-->
第三种类型-->