例如有一开始时间:2010-11-2 结束时间 2010-11-25 返回的结果是:2010-11-3,2010-11-4.2010-11-25 ,其中开始时间和结束时间是不确认的,有可以相差几年,有可能想差几个月,也有可能就相差几天。求一算法。。
   本人的写法,如果是系统时间是三 月 2 号 相差29 天就显示不了 3 月31 
public static String countYearDate(Date beginDate , int days)
 {
     Calendar cal1 = Calendar.getInstance();
    
     
   cal1.setTime(beginDate);
   int year= cal1.get(Calendar.YEAR);
   int month=cal1.get(Calendar.MONTH)+1;
   int day= cal1.get(Calendar.DAY_OF_MONTH);
  

   if ((month == 1) || (month ==3) || (month == 5) ||( month == 7) ||(month == 8)|| (month == 10) || (month == 12))   // �?31 �?
   {           int allDay = day+days;
     
     int  d = allDay %31;  
      if (d == 0)
      {
      cal1.set(Calendar.DAY_OF_MONTH, 31); 
      }
      else {
       cal1.set(Calendar.DAY_OF_MONTH, d);
}
      
    
      int m=allDay / 31;   
      
      if (m >1)
      {
        month += m;
     cal1.set(Calendar.MONTH, month);       }
      else if (m == 1 && d == 0)
      {
       cal1.set(Calendar.MONTH, month);
    
      }
      else if (m ==1 && d <=31)
      {
       cal1.set(Calendar.MONTH, month+1);
      }
      else 
      {
       
       cal1.set(Calendar.MONTH, month);
      }
      if (month >=11)
      {
       year +=1;
      }
       cal1.set(Calendar.YEAR,year);
     
      
     
      
   }
   else if (month == 2 )                 //  2 月是平年还是闰年
   {
   
   boolean leapYear= CalendarConvert.isLeapYear(year);   // 判断年份是平年还是闰年
   
     if (leapYear)
     {       int allDay= day+days;
     
      day = allDay %29;  
      if (day == 0)
      {
      cal1.set(Calendar.DAY_OF_MONTH, 29); 
      }
      else {
       cal1.set(Calendar.DAY_OF_MONTH, day);
}
      
    
      int m=allDay / 29;   
      
      if (m >1)
      {
        month += m;
     cal1.set(Calendar.MONTH, month);       }
      else if (m == 1 && day == 0)
      {
       
       cal1.set(Calendar.MONTH, month);
      }
      else if (m ==1 && day <=29)
      {
       cal1.set(Calendar.MONTH, month+1);
      }
      else 
      {
       
       cal1.set(Calendar.MONTH, month);
      }
      if (month >=11)
      {
       year +=1;
      }
      cal1.set(Calendar.YEAR,year);
     
     }
     else 
     {
      int allDay= day+days;
     
      day = allDay %28;  
      if (day == 0)
      {
      cal1.set(Calendar.DAY_OF_MONTH, 28); 
      }
      else {
       cal1.set(Calendar.DAY_OF_MONTH, day);
}
      
    
      int m=allDay / 28;   
      
      if (m >1)
      {
        month += m;
     cal1.set(Calendar.MONTH, month);       }
      else if (m == 1 && day == 0)
      {
       
       cal1.set(Calendar.MONTH, month);
      }
      else if (m ==1 && day <=28)
      {
       cal1.set(Calendar.MONTH, month+1);
      }
      else 
      {
       
       cal1.set(Calendar.MONTH, month);
      }
      if (month >=11)
      {
       year +=1;
      }
      cal1.set(Calendar.YEAR,year);
     }
   }
   else                     // 30   天
   {
   
   int allDay= day+days;
     
      day = allDay %30;    
      cal1.set(Calendar.DAY_OF_MONTH, day); 
    
      int m=allDay / 30;    
      
      if (m > 1)
      {
       month += (m-1);
    
     }
     
      cal1.set(Calendar.MONTH, month);
      
      if (month >=11)
      {
       year +=1;
      }
      cal1.set(Calendar.YEAR, year);
  }
   
     Calendar cal2 = Calendar.getInstance();
     cal2.setTime(cal1.getTime());
  
     Integer lastYear = cal2.get(Calendar.YEAR);
     Integer lastMonth = cal2.get(Calendar.MONTH);
     Integer lastDay = cal2.get(Calendar.DAY_OF_MONTH);
  
   String timeDate=lastYear.toString() +"-" + lastMonth.toString() +"-"+lastDay;
     
   System.out.println(lastYear +"年" + lastMonth+"月" + lastDay + "日");
  // System.out.println(timeDate);
 return timeDate;
 }public static void main(String[] args) {

countYearDate(new Date(), 29);
}
    求解答。。

解决方案 »

  1.   

    countYearDate(new Date(), 29);
      29 代表两个日期之间相差的天数。
      

  2.   


    import java.util.Calendar;
    import java.util.Date;public class TestDate {
    public static String countYearDate(Date beginDate, int days) {
    Calendar cal1 = Calendar.getInstance(); cal1.setTime(beginDate);
    int year = cal1.get(Calendar.YEAR);
    int month = cal1.get(Calendar.MONTH) + 1;
    int day = cal1.get(Calendar.DAY_OF_MONTH); if ((month == 1) || (month == 3) || (month == 5) || (month == 7)
    || (month == 8) || (month == 10) || (month == 12)) // 
    { int allDay = day + days; int d = allDay % 31;
    if (d == 0) {
    cal1.set(Calendar.DAY_OF_MONTH, 31);
    } else {
    cal1.set(Calendar.DAY_OF_MONTH, d);
    } int m = allDay / 31; if (m > 1) {
    month += m;
    cal1.set(Calendar.MONTH, month); } else if (m == 1 && d == 0) {
    cal1.set(Calendar.MONTH, month); } else if (m == 1 && d <= 31) {
    cal1.set(Calendar.MONTH, month + 1);
    } else { cal1.set(Calendar.MONTH, month);
    }
    if (month >= 11) {
    year += 1;
    }
    cal1.set(Calendar.YEAR, year); } else if (month == 2) // 2 月是平年还是闰年
    { boolean leapYear = CalendarConvert.isLeapYear(year); // 判断年份是平年还是闰年 if (leapYear) { int allDay = day + days; day = allDay % 29;
    if (day == 0) {
    cal1.set(Calendar.DAY_OF_MONTH, 29);
    } else {
    cal1.set(Calendar.DAY_OF_MONTH, day);
    } int m = allDay / 29; if (m > 1) {
    month += m;
    cal1.set(Calendar.MONTH, month); } else if (m == 1 && day == 0) { cal1.set(Calendar.MONTH, month);
    } else if (m == 1 && day <= 29) {
    cal1.set(Calendar.MONTH, month + 1);
    } else { cal1.set(Calendar.MONTH, month);
    }
    if (month >= 11) {
    year += 1;
    }
    cal1.set(Calendar.YEAR, year); } else {
    int allDay = day + days; day = allDay % 28;
    if (day == 0) {
    cal1.set(Calendar.DAY_OF_MONTH, 28);
    } else {
    cal1.set(Calendar.DAY_OF_MONTH, day);
    } int m = allDay / 28; if (m > 1) {
    month += m;
    cal1.set(Calendar.MONTH, month); } else if (m == 1 && day == 0) { cal1.set(Calendar.MONTH, month);
    } else if (m == 1 && day <= 28) {
    cal1.set(Calendar.MONTH, month + 1);
    } else { cal1.set(Calendar.MONTH, month);
    }
    if (month >= 11) {
    year += 1;
    }
    cal1.set(Calendar.YEAR, year);
    }
    } else // 30 天
    { int allDay = day + days; day = allDay % 30;
    cal1.set(Calendar.DAY_OF_MONTH, day); int m = allDay / 30; if (m >= 1) {//m大于等于1,就说明月份超过了1月,month加m
    month += m;
    } cal1.set(Calendar.MONTH, month-1);//在这里设置month-1 if (month > 12) {//当月份大于12时表示超过了一年,year+1
    year += 1;
    }
    cal1.set(Calendar.YEAR, year);
    } Calendar cal2 = Calendar.getInstance();
    cal2.setTime(cal1.getTime()); Integer lastYear = cal2.get(Calendar.YEAR);
    Integer lastMonth = cal2.get(Calendar.MONTH) + 1;//取月份要加1
    Integer lastDay = cal2.get(Calendar.DAY_OF_MONTH); String timeDate = lastYear.toString() + "-" + lastMonth.toString()
    + "-" + lastDay; System.out.println(lastYear + "年" + lastMonth + "月" + lastDay + "日");
    // System.out.println(timeDate);
    return timeDate;
    } public static void main(String[] args) {
    countYearDate(new Date(), 29);
    }}
    class CalendarConvert {
    public static boolean isLeapYear(int year) {
    boolean flag = false;
    flag = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    return flag;
    }
    }
    else里面做了注释,其他的两个楼主,自己改就好了!
      

  3.   


    public static void countYearDate(Date beginDate, int days)
    {
    Calendar cal1 = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
    for (int i = 1; i <= days; i++)
    {
    cal1.setTime(beginDate);
    cal1.add(Calendar.DAY_OF_MONTH, i);
    System.out.println(sdf.format(cal1.getTime()));
    }
    }

    public static void main(String[] args)
    {

    countYearDate(new Date(), 29);
    }
      

  4.   

    public static void main(String[] args) {
                    outputDate("2010-11-2","2010-11-25");
    } public static void outputDate(String startDate, String endDate) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-d");
    Calendar startCal = Calendar.getInstance();
    Calendar endCal = Calendar.getInstance(); try {
    startCal.setTime(sdf.parse(startDate));
    endCal.setTime(sdf.parse(endDate));
    while (startCal.before(endCal)) {
    startCal.add(Calendar.DAY_OF_MONTH, 1);
    System.out.println(sdf.format(startCal.getTime()));
    }
    ;
    } catch (ParseException e) {
    e.printStackTrace();
    } }