您的位置:首页 > 编程语言 > Java开发

java 判断一周连续签到几天

2017-08-16 22:01 141 查看
对于不少app来说,签到是一个很常见的功能。连续签到多少天能够获得一些相应的奖励,最近我在项目里也遇到了相似的需求,但不同的是,我的需求是获取这一周连续签到的天数。

实现这一功能相对简单,只需运用到对Calendar类时间操作。

首先先创建签到的时间数组,在这些数据上判断它们是否是在一周之内连续的

String[] mData = {"2017-06-23 00:00:00", "2017-06-24 00:00:00", "2017-06-25 00:00:00", "2017-06-26 00:00:00",
"2017-06-27 00:00:00", "2017-06-21 00:00:00", "2017-06-29 00:00:00", "2017-06-30 00:00:00",
"2017-07-01 00:00:00"};


然后需对这些String类型的时间数据进行转换,转换

List<Calendar> data1 = new ArrayList<>();
// 设置传入的时间格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd H:m:s");
Date startDate = null;
try {
for (int i = 0; i < mData.length; i++) {
Calendar c = Calendar.getInstance();
startDate = dateFormat.parse(mData[i]);
// 对 calendar 设置为 date 所定的日期
c.setTime(startDate);
data1.add(c);
}
} catch (ParseException e) {
e.printStackTrace();
}


在Calendar类中Calendar.getTimeInMillis()方法是获取两个时间的微秒级的时间差,因此当判定两时间是否相连的两天时,可以运用此方法。在本例子中:
int count==1;  //计算一周签到数(在本例中至少为1)
public int join() {
for (int i = data1.size() - 1; i > 1; i--) {
//判断一周连续
if ((data1.get(i).getTimeInMillis() - data1.get(i - 1).getTimeInMillis()) / (1000 * 60 * 60 * 24) == 1) {
if (data1.get(i).get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
count++;
if(count==7){
break;
}
} else {
count = 1;
break;
}
} else {
break;
}
}
return count;
}


其中data1.get(i).get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY判断的是当前这一时间是否为周日,因为在我的项目里周日是一周的第一天,当周日签到时,会将之前的签到数清除,也就是count=1;其中if(count==7){break;}的作用是:当你从上周六一直签到至这周六时,算本周签到数时应当是上周日至本周六的7天,也就是count=7;当若没有这个if判断的,i就会继续减,此时count就会被赋值为1,签到数也就不对。最后return count也就是一周连续签到的天数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: