Calendar now=Calendar.getInstance();
now.add(Calendar.DATE,-now.get(Calendar.DATE)+1);
now.add(Calendar.MONTH,1);
now.add(Calendar.DATE,-1);
=================================================
public static boolean isLeapYear(int year) {
      
      if (year > 1582 && year % 4 == 0 &&
         (year % 100 != 0 || (year % 100 == 0 && year % 400 == 0)))
         return true;
      else
         return false;
   }  
   public static int getMonthDays(int year, int month) {
      int day = 0;
      switch (month) {
         case 1:
         case 3:
         case 5:
         case 7:
         case 8:
         case 10:
         case 12:
            day = 31;
            break;
         case 4:
         case 6:
         case 11:
            day = 30;
            break;
         case 9:
            if (year == 1582)
               day = 20;
            else
               day = 30;
            break;
         case 2:
            if (isLeapYear(year))
               day = 29;
            else
               day = 28;
            break;
         default:
            System.out.println("MyDateTime.getMonthDays: Month(" + month + ") is beyond : 1-12。");
            break;
      }
      return day;
   }//这个是你最终调用的函数
   public static boolean isLastDay(int year, int month,int day)
   {
      int monthday = getMonthDays(year,month);
      if (day > monthday)
      {
          System.out.println(year+"year"+month+"month"+day+"day is error date!!\n");
              return false;
      }
      else if(day < monthday)
           return false;      return true;
   }

解决方案 »

  1.   

    Calendar中,假如你设定的时间是2003年3月1日,那么把date-1就会得到2003年2月28日,这样你该知道如何做了吧
      

  2.   

    这是我自己写的函数
    public String getLastMonthDay(int year,int month)
      {
        String result = "";
        int lastmonth ;
        int lastmonthday = 0;
        try
        {
          lastmonth = month - 1;
          if (lastmonth == 0)
          {
            lastmonth = 12;
            year = year - 1;
          }
          switch(lastmonth)
          {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
              lastmonthday = 31;
              break;
            case 4:
            case 6:
            case 9:
            case 11:
              lastmonthday = 30;
              break;
            case 2:
              if ((year % 4) == 0) lastmonthday = 29;
              else lastmonthday = 28;
              break;
          }
          DataCvt datacvt= new DataCvt();   //这是一个数据类型转换函数
          //日期格式 "YYYY-MM-DD"
          result = datacvt.intToString(year) + "-" + datacvt.intToString(lastmonth) + "-" + datacvt.intToString(lastmonthday);
        }catch (Exception e)
        {
          return null;
        }
        return result;
      }
    看来和sikuan(冰糖★葫芦★头)的差不多,谢谢sikuan,让我最终决定用自己的函数。
      

  3.   

    Calendar类有专门的函数来做这个工作的,public int getActualMaximum(int field),
    具体用法请参考JDK1.4文档。但据我的经验,似乎Calendar类的这个函数有Bug,建议使用GregorianCalendar类的相对应的函数。
      

  4.   

    好像还不只星期有问题,月份的也有,我上次用的时候,哪个月经过上面这个函数算出来都是31,用
    GregorianCalendar类就没有问题。