Java 判断连续签到天数

   public static void main(String[] args) {
        try {
            /**
             * 造一些测试数据,这里就不去数据库里查了,一般正常是数据库有个表记录签到记录
             */
            List<String> dateList = new ArrayList<>();
            dateList.add("2019-12-31");
            dateList.add("2020-01-01");
            dateList.add("2020-01-02");
            List<Date> dates = new ArrayList<>();
            for (String date : dateList) {
                Calendar calendarTo = Calendar.getInstance();
                calendarTo.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(date));
                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(0);
                c.set(calendarTo.get(Calendar.YEAR), calendarTo.get(Calendar.MONTH),
                        calendarTo.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
                dates.add(c.getTime());
            }

            //定义一个变量表示连续签到天数,从1开始
            int continuousDays = 1;

            //1. 注意先对时间进行从小到大排序(可以在数据库里查的时候就根据时间排序,也可以查询出来之后再排序)

            /**
             * 2. 从最大的时间开始往前比较,因为我们是要拿连续签到的时间,这样才有意义,减少无谓的比较
             */
            Calendar later = Calendar.getInstance();
            Calendar before = Calendar.getInstance();
            for (int i = dates.size() - 1; i > 0; i--){
                later.setTime(dates.get(i));
                before.setTime(dates.get(i - 1));
                //前一天 + 1天 = 后一天,则视为连续签到
                before.add(Calendar.DAY_OF_MONTH,1);
                if (later.get(Calendar.YEAR) == before.get(Calendar.YEAR)
                        && later.get(Calendar.MONTH) == before.get(Calendar.MONTH)
                        && later.get(Calendar.DAY_OF_YEAR) == before.get(Calendar.DAY_OF_YEAR)){
                    continuousDays++;
                }else {
                    //只要遇到不连续的就不用再往前比较了
                    break;
                }
            }
            System.out.println("连续签到了" + continuousDays + "天");
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
发布了60 篇原创文章 · 获赞 41 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/aimashi620/article/details/104646788
今日推荐