一般金融産品的賬務測試時,我們會接觸到還款方式,到期還款日等概念。
在自動化測試或者腳本使用中,我們需要動态的生成到期還款日去進行賬務測試,這篇文章主要介紹了常見的幾種到期還款日計算方式。
一、固定期限(比如放款日後的30日)
二、放款日的對日( 假設1月5日放款,2月5日為還款日;假設1月31号放款,2月隻有28天,28号為還款日;假設3月31号放款,4月30号為還款日;)
三、每月固定某一天作為還款日,比如:等本等息、等額本息、等額本金等貸款方式有這種類型;
下面附上對應的代碼:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#部落格:https://blog.csdn.net/sinat_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)
舉例:第一種類型-->
第二種類型-->
第三種類型-->