业务上需要开发一个获取连续签到(打卡)天数的功能,修修改改多次后发现了规律,可以减少代码量,使程序更简洁明了。

核心是getContinuousSignInDay方法的逻辑,每次用当前时间去比较,规律是比较的天数是递增的(连续签到的情况下)。

这份代码脱去了业务上的逻辑,只有签到的功能demo

import lombok.Data;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

/**

* @Description TODO

* @Author fangyunhe

* @Date 2019/8/15 17:41

* Version 1.0

**/

public class SignInTest {

@Data

static

class SignIn{

private Date signInDay;

public SignIn(){

}

public SignIn(String day) throws ParseException {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

signInDay = sdf.parse(day);

}

}

public static void main(String[] args) throws Exception{

ListsignInList = new ArrayList<>();

signInList.add(new SignIn("2019-08-15"));

signInList.add(new SignIn("2019-08-14"));

//signInList.add(new SignIn("2019-08-13"));

signInList.add(new SignIn("2019-08-12"));

signInList.add(new SignIn("2019-08-11"));

int continuousSignInDay = getContinuousSignInDay(signInList);

System.out.println("连续签到日期:"+ continuousSignInDay);

}

/**

* 连续签到天数

*

* @return int

* @Author fangyunhe

* @Date 2019-08-15 17:16:01

* @Param

**/

private static int getContinuousSignInDay(ListsignInList) {

//continuousDay 连续签到数

int continuousDay = 1;

boolean todaySignIn = false;

Date today = new Date();

for (int i = 0; i < signInList.size(); i++) {

SignIn signIn = signInList.get(i);

int intervalDay = distanceDay(today, signIn.getSignInDay());

//当天签到

if (intervalDay == 0 && i == 0) {

todaySignIn = true;

}

else if (intervalDay == continuousDay) {

continuousDay++;

}else {

//不连续,终止判断

break;

}

}

if (!todaySignIn) {

continuousDay--;

}

return continuousDay;

}

/**

* 两个日期对比间隔天数

*

* @param smallDay

* @return boolean

* @Author fangyunhe

* @Date 2019-08-13 18:42:41

* @Param largeDay

**/

private static int distanceDay(Date largeDay, Date smallDay) {

int day = (int) ((largeDay.getTime() - smallDay.getTime()) / (1000 * 60 * 60 * 24));

return day;

}

}

java设计按月每天签到_java实现连续签到(打卡)天数相关推荐

  1. CSDN是怎么实现用户签到,统计签到次数,连续签到天数等功能微服务的

    文章目录 需求分析 设计思路 用户签到和统计连续签到的次数 签到控制层 SignController 签到业务逻辑层 SignService 测试 按月统计用户签到的次数 签到控制层 SignCont ...

  2. java设计按月每天签到_java实现app签到功能

    本文实例为大家分享了java实现app签到功能的具体代码,供大家参考,具体内容如下 1.首先设计二张表,第一张表sign_calc记录用户连续签到次数,字段id,user_id,continue_da ...

  3. java设计按月每天签到_java微信签到功能实现:java做的一个简易的微信签到系统的案例...

    java微信签到功能实现,现在微信签到功能很流行,这个签到功能帮助微信用户更好的管理自己的微信公众号,那你想知道java微信签到功能如何实现呢,今天小编就特意为大家分享一个关于java微信签到功能实现 ...

  4. mysql怎么做每天签到_MYSQL实现连续签到功能断签一天从头开始(sql语句)

    1,创建测试表 create table `testsign` ( `userid` int(5) default null, `username` varchar(20) default null, ...

  5. ios 每日签到功能,模拟连续签到和中断需要重新签到

    闲着没事干,想到之前一个项目有个签到功能,如上图所示,所幸就写出来,难度也不大,因为没有接口,我自己写了本地数据库模拟一些连续签到和中断签到需要重新签到的功能,如果有需要的话,直接跟后台商量写成这样替 ...

  6. java设计按月每天签到_活动攻略|新同学新签到,欢乐福利全都要!

    12月03日[每日一题答案]- 枫叶书签 答对问题即有机会获得金币.道具.积分,还有宠物好奇星噢~ 12月来了,和12月一起来的 是我们的新同学--花轮! 谁不喜欢浪漫体贴的小少爷呢! 喵星星感觉 自 ...

  7. java设计按月每天签到_签到功能java实现

    不嫌代码写的烂 可以参考下 https://github.com/ren2881971/WeChat 着急实现功能 没重构 ###### /** * 微信授权 * * */ public class ...

  8. java设计课程数学生数_JAVA课程设计小学数学算数测试软件.pdf

    软 件 学 院 课程设计报告书 课程名称 面向对象程序设计 设计题目 小学数学测试软件 专业班级 学 号 姓 名 指导教师 2014 年 6 月 目 录 1 设计时间3 2 设计目的3 3 设计题目3 ...

  9. java设计复数类报告总结_java复数类

    1 编写一个完整的 Java 程序,包括 Complex 和 TestComplex 两个类. 使用复数类 Complex 验证两个复数 1+2i 和 3+4i 相加产生一个新的复数 4+6i . . ...

最新文章

  1. activeMQ 填坑记
  2. 分析 C# 2.0 新特性 -- 范型(Generics)
  3. codeforces global round 1题解搬运
  4. PP视频如何设置默认缓存个数
  5. 除阿里、网易和字节外,杭州居然还有这么多互联网公司!
  6. [Python] L1-021. 重要的话说三遍-PAT团体程序设计天梯赛GPLT
  7. spring boot全局异常捕捉
  8. redis源码编译和调试
  9. win10磁盘占用率过高解决办法
  10. 香橙派更改中文界面以及安装输入法
  11. OSChina 周六乱弹 —— 快上车,司机调休了
  12. 魑、魅、魍、魉、妖、精、鬼、怪的区别
  13. 阿里安全研究员路全:如何运用AI对抗“数据污染”?
  14. Python简单浪漫表白代码鲜花
  15. 《2023新一代数字办公白皮书》正式发布!| 爱分析报告
  16. 玩家交互体验—剑网3好友系统
  17. Android 修改zxing二维码样式
  18. chrome必备插件
  19. 微信小程序提交上线时 定位接口提示未配置
  20. 电路中的基础元件-无源晶振详谈

热门文章

  1. 别人问我:为什么程序员都不善言辞?惭愧啊!
  2. ROS学习:cv_bridge与opencv版本冲突三种解决方案
  3. c语言控制led数码管,数码管LED
  4. Ubuntu系统安装LAMP应用Discuz 建设论坛网站
  5. 解决\xEF\xBB\xBF问题
  6. unity Editor下批量设置材质球中的贴图部分:
  7. 【广度】2017上半年互联网的风口与泡沫
  8. c#通过ftp下载文件
  9. 南京大学计算机科学与技术专业博士,南京大学2017年计算机科学与技术系博士招生目录...
  10. Prediction of Multidrug-Resistant TB from CT Pulmonary Images Based on Deep Learning Techniques论文总结