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();
}
}
Java 判断连续签到天数
猜你喜欢
转载自blog.csdn.net/aimashi620/article/details/104646788
今日推荐
周排行