写一个连续签到功能,核心在判断签到几天,弄了1个半小时写好这个方法,我的算法不行。不知有更好的方法否,是否可在SQL中就判断了?
/**
* 计算连续签到
* 1.签到之后才开始调用该方法,所以l中的最新日期为当天
* 2.参数l中的日期必须是按签到日期降序排列
* 3.参数l中的日期格式是java.sql.Date或满足yyyy-MM-dd的,不带小时分钟秒
*/
public static int calRowDate(List<Date> l){
if(l==null || l.size()==0) return 0;
int num = 1;
int size=0;
//判断最新的签到是不是当天,如不是,返回0
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date cd = l.get(0);//取l中最新日期
if(!(sdf.format(date).equals(sdf.format(cd)))){
return 0;
}
if(l.size()==0){
return 1;
}
long l1,l2;
while(size+1<l.size()){
l1 = l.get(size).getTime();
l2 = l.get(size+1).getTime();
if(l1-l2==1000*60*60*24){
num++;
size = size+1;
}else{
break;
}
}
return num;
}
public static void main(String[] args) throws Exception {
List<Date> l = new ArrayList<Date>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
l.add(sdf.parse("2013-06-08"));
l.add(sdf.parse("2013-06-07"));
l.add(sdf.parse("2013-06-06"));
l.add(sdf.parse("2013-06-05"));
System.out.println(calRowDate(l));
}