求一个方法,需求是:传入两个参数,第一个参数是开始日期,第二个参数是结束日期,计算两个日期之间的整年、整月、和整日。例如:从2008年2月1号到2010年5月5号,整年有2008年2月1号到2009年1月31号和2009年2月1号到2010年1月31号,整月有2010年的2月1号到2月28号和3月1号到3月31号和4月1号到4月30号,整日有5月1号、2号、3号、4号、5号。
急需答案,谢谢了。
有了答案马上结贴
急需答案,谢谢了。
有了答案马上结贴
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;class Test { public static void main(String[] args) {
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
start.set(2008, 1, 1);//2008年2月1日
end.set(2010, 4, 5);//2010年4月5日
List<String>[] rtnLists = getDateFigure(start.getTime(),
end.getTime()); for (int i = 0; i < rtnLists.length; i++) {
List<String> lt = rtnLists[i];
switch (i) {
case 0:
System.out.println("整年");
break;
case 1:
System.out.println("整月");
break;
default:
System.out.println("整日");
break;
}
for (String string : lt) {
System.out.println(string);
}
}
} public static List<String>[] getDateFigure(Date dStart, Date dEnd) {
List<String>[] rtnLists = new List[3];
List<String> ltYear = new ArrayList<String>();
List<String> ltMonth = new ArrayList<String>();
List<String> ltDay = new ArrayList<String>();
rtnLists[0] = ltYear;
rtnLists[1] = ltMonth;
rtnLists[2] = ltDay; if (dStart.after(dEnd)) {
return rtnLists;
} SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Calendar start = Calendar.getInstance();
start.setTime(dStart);
Calendar end = Calendar.getInstance();
end.setTime(dEnd);
end.add(Calendar.DAY_OF_MONTH, 1);
String s = sdf.format(start.getTime());
start.add(Calendar.YEAR, 1); while (end.compareTo(start) > -1) {
start.add(Calendar.DAY_OF_MONTH, -1);
ltYear.add(s + "-" + sdf.format(start.getTime()));
start.add(Calendar.DAY_OF_MONTH, 1);
s = sdf.format(start.getTime());
start.add(Calendar.YEAR, 1);
}
start.add(Calendar.YEAR, -1);
start.add(Calendar.MONTH, 1);
while (end.compareTo(start) > -1) {
start.add(Calendar.DAY_OF_MONTH, -1);
ltMonth.add(s + "-" + sdf.format(start.getTime()));
start.add(Calendar.DAY_OF_MONTH, 1);
s = sdf.format(start.getTime());
start.add(Calendar.MONTH, 1);
}
start.add(Calendar.MONTH, -1);
while (end.after(start)) {
start.add(Calendar.DAY_OF_MONTH, 1);
ltDay.add(s);
s = sdf.format(start.getTime());
}
return rtnLists;
}
}输出结果
整年
2008年02月01日-2009年01月31日
2009年02月01日-2010年01月31日
整月
2010年02月01日-2010年02月28日
2010年03月01日-2010年03月31日
2010年04月01日-2010年04月30日
整日
2010年05月01日
2010年05月02日
2010年05月03日
2010年05月04日
2010年05月05日