求一个方法,需求是:传入两个参数,第一个参数是开始日期,第二个参数是结束日期,计算两个日期之间的整年、整月、和整日。例如:从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号。
急需答案,谢谢了。
有了答案马上结贴

解决方案 »

  1.   

    返回一个3位的List数组,具体显示方式可以自己改import java.text.SimpleDateFormat;
    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日
      

  2.   

     qi 楼好强啊  O(∩_∩)O~