java实现连续签到(打卡)天数

时间:2025-03-19 21:48:17

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

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

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

import ;

import ;
import ;
import ;
import ;
import ;

/**
 * @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 = (day);
        }
    }

    public static void main(String[] args) throws Exception{
        List<SignIn> signInList = new ArrayList<>();
        (new SignIn("2019-08-15"));
        (new SignIn("2019-08-14"));
        //(new SignIn("2019-08-13"));
        (new SignIn("2019-08-12"));
        (new SignIn("2019-08-11"));
        int continuousSignInDay = getContinuousSignInDay(signInList);
        ("连续签到日期:"+ continuousSignInDay);
    }

    /**
     * 连续签到天数
     *
     * @return int
     * @Author fangyunhe
     * @Date 2019-08-15 17:16:01
     * @Param
     **/
    private static int getContinuousSignInDay(List<SignIn> signInList) {
        //continuousDay 连续签到数
        int continuousDay = 1;
        boolean todaySignIn = false;
        Date today = new Date();
        for (int i = 0; i < (); i++) {
            SignIn signIn = (i);
            int intervalDay = distanceDay(today, ());
            //当天签到
            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) ((() - ()) / (1000 * 60 * 60 * 24));
        return day;
    }
}

 

相关文章