一般金融产品的账务测试时,我们会接触到还款方式,到期还款日等概念。
在自动化测试或者脚本使用中,我们需要动态的生成到期还款日去进行账务测试,这篇文章主要介绍了常见的几种到期还款日计算方式。
一、固定期限(比如放款日后的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)

举例:第一种类型-->

python 对客还款计划 python计算每月还款额_Python

第二种类型-->

python 对客还款计划 python计算每月还款额_python 对客还款计划_02

第三种类型-->

python 对客还款计划 python计算每月还款额_实战_03