规则如下:

借款截止日期、首期的还款日期、还款日期的计算规则:

计算原则为算头不算尾,借款起始日期当天就算一天

比如借款期3个月,若借款起始日期为2018.11.11,首期的还款日期则为2018.12.10;

从借款开始日期的”下个月同一天的前一天”为首期的还款日期,之后每间隔一个月就是每期的还款日期,在实际中,还款日期受月小影响有例外情况,比如借款期为3个月:

若借款日期为2018.2.28,截止日期就为2018.5.27,还款日期为3.27/4.27/5.27

若借款日期为2018.1.30,截止日期就为2018.4.29,还款日期为2.28/3.29/4.29

比如借款期限为10天:

若借款日期为2018.2.27,截止日期就为2018.3.8,还款日期为3.8,算头不算尾的原则。

短信提醒日期为 每期的还款日期当天 和前两天,发送提醒。

public class BorrowerUtil {private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//  public static void main(String[] args) {
//      Date nowTime = new Date();
//      try {
//          Date beginTime =sdf.parse("2018-1-1");
//          Date endTime = sdf.parse("2018-12-31");
//          System.err.println("当天日期:"+sdf.format(nowTime));
//          System.err.println("借款日期:"+sdf.format(beginTime));
//          System.err.println("截止日期:"+sdf.format(endTime));
//          boolean b = isSend(nowTime,beginTime,endTime);
//          System.err.println(b?"发短信":"不发短信");
//      } catch (ParseException e) {
//          e.printStackTrace();
//      }
//  }/*** 判断今天是否发送短信* @param nowTime   当前时间* @param beginTime 借款时间* @param endTime   还款结束时间* @return*/public static boolean isSend(Date nowTime, Date beginTime, Date endTime) {//计算当月的还款日Calendar begin = Calendar.getInstance();begin.setTime(beginTime);//得到日期int day = begin.get(Calendar.DAY_OF_MONTH);//在获取当前月的最大天数Calendar now = Calendar.getInstance();now.setTime(nowTime);Calendar end = Calendar.getInstance();end.setTime(endTime);//得到借款时间的下一个月的前两天  得到第一次还款日begin.add(Calendar.MONTH, 1);begin.add(Calendar.DAY_OF_MONTH, -3);System.err.println("提醒日:"+sdf.format(begin.getTime()));if (begin.getTime().getTime()>now.getTime().getTime()||end.getTime().getTime()+24*60*60*1000<now.getTime().getTime()) {return false;}//计算当月的还款日begin = Calendar.getInstance();begin.setTime(beginTime);//得到日期begin.add(Calendar.DAY_OF_MONTH, -1);day = begin.get(Calendar.DAY_OF_MONTH);//在获取当前月的最大天数now = Calendar.getInstance();now.setTime(nowTime);int maxNowDay = now.getActualMaximum(Calendar.DAY_OF_MONTH);//判断int hkDay = 0;if (day>maxNowDay) {//如果还款日 大于当前月的最大天数  那么还款日 就是当前的最大天数hkDay = maxNowDay;//设置进去begin.set(Calendar.DAY_OF_MONTH, hkDay);}else {//否则就是还款日减一天hkDay = begin.get(Calendar.DAY_OF_MONTH);}System.err.println("当月还款日:"+hkDay);int nowDay=now.get(Calendar.DAY_OF_MONTH);if (nowDay==hkDay) {return true;}System.err.println("当月还款日:"+hkDay);//计算提醒日begin.add(Calendar.DAY_OF_MONTH, -2);int txDay = begin.get(Calendar.DAY_OF_MONTH);System.err.println("提醒日:"+txDay);if (nowDay==txDay) {return true;}return false;}
}

测试了20组数据:测试结果如下

1.
当天日期:2018-02-28
借款日期:2018-02-28
截止日期:2018-05-27
不发短信
2.
当天日期:2018-03-28
借款日期:2018-02-28
截止日期:2018-05-27
当月还款日:27
提醒日:25
不发短信
3.
当天日期:2018-03-25
借款日期:2018-02-28
截止日期:2018-05-27
当月还款日:27
提醒日:25
发短信
4.
当天日期:2018-03-27
借款日期:2018-02-28
截止日期:2018-05-27
当月还款日:27
发短信
5.
当天日期:2018-04-25
借款日期:2018-02-28
截止日期:2018-05-27
当月还款日:27
提醒日:25
发短信
6.
当天日期:2018-04-27
借款日期:2018-02-28
截止日期:2018-05-27
当月还款日:27
发短信
7.
当天日期:2018-05-27
借款日期:2018-02-28
截止日期:2018-05-27
当月还款日:27
发短信
8.
当天日期:2018-05-28
借款日期:2018-02-28
截止日期:2018-05-27
提醒日:2018-03-25
不发短信
9.
当天日期:2018-02-27
借款日期:2018-01-30
截止日期:2018-04-29
提醒日:2018-02-25
当月还款日:28
提醒日:28
不发短信
10.
当天日期:2018-02-28
借款日期:2018-01-30
截止日期:2018-04-29
提醒日:2018-02-25
当月还款日:28
发短信
11.
当天日期:2018-03-29
借款日期:2018-01-30
截止日期:2018-04-29
提醒日:2018-02-25
当月还款日:29
发短信
12.
当天日期:2018-03-27
借款日期:2018-01-30
截止日期:2018-04-29
提醒日:2018-02-25
当月还款日:29
提醒日:27
发短信
13.
当天日期:2018-04-27
借款日期:2018-01-30
截止日期:2018-04-29
提醒日:2018-02-25
当月还款日:29
提醒日:27
发短信
14.
当天日期:2018-04-29
借款日期:2018-01-30
截止日期:2018-04-29
提醒日:2018-02-25
当月还款日:29
发短信
15.
当天日期:2018-01-29
借款日期:2018-01-01
截止日期:2018-12-31
提醒日:2018-01-29
当月还款日:31
提醒日:29
发短信
16.
当天日期:2018-01-31
借款日期:2018-01-01
截止日期:2018-12-31
提醒日:2018-01-29
当月还款日:31
发短信
17.
当天日期:2018-02-01
借款日期:2018-01-01
截止日期:2018-12-31
提醒日:2018-01-29
当月还款日:31
提醒日:29
不发短信

18.
当天日期:2018-02-28
借款日期:2018-01-01
截止日期:2018-12-31
提醒日:2018-01-29
当月还款日:28
发短信

19.
当天日期:2018-02-26
借款日期:2018-01-01
截止日期:2018-12-31
提醒日:2018-01-29
当月还款日:28
当月还款日:28
提醒日:26
发短信

20.
当天日期:2018-03-29
借款日期:2018-01-01
截止日期:2018-12-31
提醒日:2018-01-29
当月还款日:31
当月还款日:31
提醒日:29
发短信

没有完全测试:如果是完全测试,思路大概是使用日历类循环365天,将这个时间作为借款时间,然后得出还款时间和提醒时间,再去验证还款时间和提醒时间对不对,如果计算的还款时间和提醒时间对的话,那这个逻辑就肯定没问题。

这个代码是放进springboot任务里面运行的,每天上午10点检查一次,查数据库时貌似应该先过滤一次,当天时间是否在第一次提醒到还款结束时间范围内,如果在就得到一批结果,再运行上面写的代码。而上面的代码不需要再判断是否在范围内了

JAVA编写还款提醒短信的时间判断相关推荐

  1. Java阿里云发送短信

    文章目录 前言 准备工作 短信服务API介绍 阿里云api发送短信 传送门 前言 短信服务,是阿里云为客户提供的一种通信服务的能力. 准备工作 需要申请一个阿里云账号 开通短信服务 添加签名和模板(需 ...

  2. JAVA对接发送SMS短信服务

    JAVA对接发送SMS短信服务 短信服务申请 JAVA对接 代码编写 配置类 SmsComponent nacos配置中心--对应上面读取的参数 调用 Vue前端测试代码 效果 结语 短信服务申请 网 ...

  3. 企业员工生日提醒短信怎么发送

    老板.销售.HR都会遇到在客户.公司员工生日的时候,送个祝福,送个小礼物等增进感情的事情,但是人数多了以后,光靠纸和脑子.表格,是不容易记录下来的,最好的办法是能够设置生日提醒,这样就可以防患于未然, ...

  4. 云之讯php短信接口,菏泽java云之讯短信接口价格如何计算? 新锐信息科技服务至上...

    免费接码验证码接收平台 好用的接码平台有以下几个特征: 1.平台功能设置人性化:语音验证码+短信验证码一体化,方便用户使用.现在很多项目都慢慢开始了语音验证码的步伐. 2.平台稳定经营时间久:接码平台 ...

  5. java对接阿里云短信服务详解(验证码,推广短信,通知短信)

    前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...

  6. Java调用SMSLib发送短信详解

    项目中需要用到发送短信功能,之前没做过这方面,找人咨询了一下,也网上查了查,发现并不是很复杂.目前项目已经完成了,做个记录以备后用.程序中发送短信主要有4种方法:      1.向当地的运营商申请网关 ...

  7. Java实现阿里云短信云服务

    1.前提 此文章主要介绍 短信服务 的入门,可根据实际业务需求自行编写代码,写的简陋之处请见谅  想实现 阿里云短信服务,必须的有 阿里云的账号,此处文章前的你们是不是 有备而来?点击下方注册 OR ...

  8. JAVA 实现阿里云短信发送功能

    目录 1.引入依赖 2.添加.yml配置 3.短信接口开发 4.接口调用 1.引入依赖 引入阿里云短信依赖jar包 <!--阿里云服务sdk --> <dependency>& ...

  9. JAVA对接阿里大于短信验证

    本文介绍的是JAVA的阿里大于短信验证对接,网上好多版本都是旧版本,我自己写完之后觉得应该更新一下,现在记录一下,怕以后忘记,申请步骤忽略 首先,去阿里大于下载SDK 第一步,就是安装阿里大于的SDK ...

最新文章

  1. js 两行之间的设置间距_敲敲黑板 | 文字间距随意调
  2. 美国进入紧急状态:谷歌投入1700名工程师上阵抗疫,马斯克称车祸比新冠病毒危险...
  3. 5g宣传方案_5G时代来了,VR如何玩转线上营销新模式
  4. sql 字符串比较大小_SQL简单查询第二关
  5. 54 Django 模型层(1) 单表查询
  6. 404 Not Found: Requested route ('jerrylist.cfapps.eu10.hana.ondemand.com') does not exist
  7. JS window事件全集解析 (转载)
  8. 解耦知识蒸馏,让Hinton在7年前提出的方法重回SOTA行列(CVPR 2022)
  9. Apache Kafka
  10. (38)FPGA面试技能提升篇(C/C++、questasim仿真工具)
  11. Java线程与Android线程,Android线程篇(三):深入理解Java线程池(一)
  12. 于仕琪 老师新版本人脸识别 - DLL接口及Python语言案例
  13. python交并补_python开发学习- ( 字典的相关函数 集合中的交差并补 集合相关的函数 冰冻集合)...
  14. Markdown编辑器:好看的字体颜色和各种表情符号
  15. 游戏录制软件哪个好?游戏录制软件推荐
  16. Choerodon猪齿鱼实践之持续交付流水线
  17. (php毕业设计)基于php的家居商城管理系统源码
  18. TCP与UDP协议初步学习——网络环境中分布式进程通信的基本概念
  19. 【JAVA进阶篇】字符串的详细介绍
  20. 全国计算机一级选择题免费,全国计算机一级考试选择题试题与详细答案

热门文章

  1. 计算机中考在线评分卡,重磅!中考电脑阅卷流程曝光!认真读完至少多拿20分!...
  2. 开发动态网站所需的构件
  3. C语言计算圆的角度与弧度、面积、周长计算
  4. Google Earth Engine(GEE)——风向(RTMA: Real-Time Mesoscale Analysis数据集)可视化趋势图(美国区域为例)
  5. java 静态数组_java(四)创建静态数组
  6. SECS/GSM 通讯中转工具
  7. 预测本次出差顺利否?
  8. c语言指数常熟的正确表达形式,C语言程序设计实验实验指导书及答案
  9. 磁盘爆满常见报错及解决方法
  10. OT算法在协同编辑器中的应用