【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.years_month = ym_date.month + num                     # 第N个月s_day = ym_date.dayn_year = int((s_month-1)/12)                      # 对比12个月,计算年度c_year = s_year +n_yearc_month = s_month-12*n_yearc_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_dayelse:n_day = c_dayn_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_yearc_month = s_month-12*n_yearn_date = date(c_year, c_month, day).strftime('%Y-%m-%d')#print(n_date)return (n_date)

举例:第一种类型-->

第二种类型-->

第三种类型-->

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识python多线程

1) 在python中如何创建一个线程对象? 如果你要创建一个线程对象,很简单,只要你的类继承threading.Thread,然后在__init__里首先调用threading.Thread的__init__方法即可: import threading class MyThread(threading…

Fiddler抓包工具之Filters(过滤器)进行会话过滤

一、设置User Fiters启用 未勾选Use Filters,未启用此功能;已勾选Use Filters,已启用此功能 二、Action设置 Run Filterset now :马上执行过滤,立即生效过滤 Load Filterset: 加载本地过滤文件到fiddler Save Filt…

【pyQT5】Python3+pyQT5开发环境安装与配置

在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成。Qt Designer的设计符合MVC的架构,其实现了视图和逻辑的分离,从而实现了开发的便捷。 Qt Designer中的操作方式十分灵活,其通过拖拽的方式放置控件可以随时…

C++运行界面一闪而过解决

#include<iostream> #include <stdlib.h> #切记导入这个头文件 using namespace std;int main() { cout << "Hello Word"<<endl; system("pause"); #让界面不是一闪而过 return 0; } 注意&#xff1a;VS2012以上版本才支持C 11…

【TensorFlow】TensorFlow是什么?

TensorFlow 是一个开源的、基于 Python 的机器学习框架&#xff0c;它由 Google 开发&#xff0c;并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用&#xff0c;是目前最热门的机器学习框架。 除了Python&#xff0c;TensorFlow 也提供了 C/C、Java、Go、…

TPS、QPS、系统吞吐量、并发用户数区别及性能术语的理解

一、QPS/TPS QPS&#xff1a;Queries Per Second意思是“每秒查询率”&#xff0c;是一台服务器每秒能够相应的查询次数&#xff0c;是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 TPS&#xff1a;是TransactionsPerSecond的缩写&#xff0c;也就是事务数/…

js设置了location.href不跳转问题

今天碰到一个问题&#xff0c;用JS设置了location.href就是不跳转的问题。代码如下&#xff1a; $(‘#gofriendtab’).on(‘click’, function() { location.href “XXXXX”; }) 测试运行了一下&#xff0c;发现确实执行了这个代码&#xff0c;但是…

【TensorFlow】Win7+Anaconda+python3.6+Tensorflow1.9安装教程

相关链接 官网&#xff1a;https://tensorflow.google.cn/ github&#xff1a;https://github.com/tensorflow/tensorflow 中文社区网&#xff1a;http://www.tensorfly.cn/ 安装说明 平台&#xff1a;windows 7 Anaconda版本&#xff1a;4.6.14 python版本&#xff1a;3.6.…

【Jmeter篇】如何利用Jmeter配置元件计数器、随机变量制造批量数据和变量参数化?

一、计数器 1、线程组-配置元件-计数器 2、功能介绍 starting value&#xff1a;给定计数器的起始值、初始值&#xff0c;第一次迭代时&#xff0c;会把该值赋给计数器 递增(Increment)&#xff1a; 每次迭代后&#xff0c;给计数器增加的值 最大值(Maximum) &#xff1a;…

echarts自适应父div大小

百度了n种办法&#xff0c;试了n种办法后终于测出来了。 方法一&#xff1a;window.οnresizemyChart.resize; 但是没有效果 方法二&#xff1a; window.addEventListener("resize", function () { myChart.resize(); }); 依旧没有效果 方法三&#xff1a; &l…

软件工程经济学习题 答案(不保证对错,找不到答案)

一、资金等值计算 1.某IT企业今年向银行贷款20万元以购置一台设备。若银行贷款利率为10%&#xff0c;规定10年内等额偿还&#xff0c;试求每年的偿还金额。 2.某软件企业向银行贷款200万元&#xff0c;按年利率为8%进行复利计息&#xff0c;试求该企业第5年末连本带利一次偿还银…

【数据库】Mysql日期/时间相关函数汇总

当我们处理日期时&#xff0c;最难的任务恐怕是确保所插入的日期的格式&#xff0c;与数据库中日期列的格式相匹配。 只要数据包含的只是日期部分&#xff0c;运行查询就不会出问题。但是&#xff0c;如果涉及时间&#xff0c;情况就有点复杂了。 在讨论日期查询的复杂性之前&a…

【测试方法篇】效率测试

一、操作数据库 1、测试页面数据翻页功能&#xff0c;使用insert插入多条数据&#xff0c;测试完成后&#xff0c;再删除插入的数据 2、订单表order&#xff0c;订单状态字段status 1新订单 2已提交订单 3已付款订单 4已发货订单 5已完成订单 已付款列表页&#xff0c;只…

Django+Jquery+Ajax+验证码登录案例

1&#xff0c;创建项目test04 2&#xff0c;创建应用app为booktest 3&#xff0c;注册应用booktest 作用让创建的应用运行起来 4&#xff0c;在项目根目录下创建模板templates目录 作用就是存放html文件在项目的settings.py文件中配置模板&#xff0c;如下图&#xff1a;5&…

【数据库】Mysql日期/时间函数实际案例

有一款金融产品&#xff0c;总共24期&#xff0c;每月2日到期还款日&#xff0c;第一个到期还款日为放款日下个月的2日&#xff0c;现在我们知道所有订单的放款时间&#xff0c;现在我们想统计每个订单当前时间是第几期。 举个简单例子&#xff1a;当期日期为2019-11-12&#…

【Jmeter篇】1小时轻松搞定项目接口自动化测试与数据驱动

之前我们的用例数据都是配置在 Jmeter Http 请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开 jmeter 重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f; 其实我们可以将用…

module 'queue' has no attribute 'Queue'解决

import queue q queue.Queue() q.put(a) q.put(b) print(q.get())错误&#xff1a; AttributeError: module queue has no attribute Queue 解决方法&#xff1a; 把程序名命名和包名一样导致错误。命名为queue1.py就ok了

【Python】import自己的模块报错

在实际使用python时&#xff0c;我们会将一些公共的东西写到一些基础模块中&#xff0c;供其他模块去调用&#xff0c;这时会去import自定义的一些基础模块&#xff0c;然后来导入。 自己写好了脚本&#xff0c;然后导入&#xff0c;导入的情况分为以下情况&#xff1a; 1. 运行…

Jmeter生成自动化和性能多维度测试报告(性能指标和监听器图表)

jmeter在命令行下还可以生成多维度的测试报告&#xff0c;里面包含了常用的性能指标和监听器图表。 一、环境要求 1、jmeter3.0版本之后开始支持动态生成测试报表 2、jdk版本1.7以上 3、需要jmx脚本文件 二、生成jtl文件 1、进入bin目录下cd jmeter -n -t C:\jmeter\apach…

python3判断字典、列表、元组为空以及字典是否存在某个key的方法

m1[] m2{} m3() m4{"name":1,"age":2} #也可用if not m1:print("m1不是列表") if m1:print("m1不是列表") else:print(m1)print("m1是空列表")if m2:print("m2不是字典") else:print("m2是空字典") if …