天天看點

【Python實戰】使用python計算多種類型到期還款日

一般金融産品的賬務測試時,我們會接觸到還款方式,到期還款日等概念。

在自動化測試或者腳本使用中,我們需要動态的生成到期還款日去進行賬務測試,這篇文章主要介紹了常見的幾種到期還款日計算方式。

一、固定期限(比如放款日後的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)
           

舉例:第一種類型-->

【Python實戰】使用python計算多種類型到期還款日

第二種類型-->

【Python實戰】使用python計算多種類型到期還款日

第三種類型-->

【Python實戰】使用python計算多種類型到期還款日