取得指定日期所在月的第一天和最后一天 
比如:指定日期2007-8-8 去所在月的 第一天 2007-8-1 
                                  最后一天2007-8-31

解决方案 »

  1.   

    //取得   某年某月的天数   
      //月的数值为   0-11   
      int[]   days   =   new   int[]{31,28,31,30,31,30,31,31,30,31,30,31};   
      public   int   getDays(int   year,int   month)   
      {   
      if(month   ==   1){   
      if(year%4   ==   0){   
      if(year%100   ==   0){   
      return   28;   
      }else{   
      return   29;   
      }   
      }else{   
      return   28;   
      }   
      }   
      else{   
      return   days[month];   
      }   
      }   
        
    //  给出一个日期   date   ,取得该日期所在月的最后一天   
      Calendar   cal   =   Calendar.getInstance();   
      cal.setTime(date);   
      cal_temp.clear();   
      cal_temp.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),getDays(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH)));   
      cal_temp.getTime()   //就是   date   所在月的最后一天.
      

  2.   

    int year=2007;
    int month=8;
    java.util.Calendar c=java.util.Calendar.getInstance();
    c.set(year,month-1,1);
    java.util.Date first=c.getTime();
    c.set(year,month,0);
    java.util.Date last=c.getTime();
    System.out.println(first.toLocaleString());
    System.out.println(last.toLocaleString());
      

  3.   

    呵呵 我自己写了一个自己能理解的 请高手多多指教 最主要还是求所在月的最后一天
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    public class data { /**
     * @param args
     */
    public static int[] DAY_OF_MONTH_LEAP_YEAR = { 31, 29, 31, 30, 31, 30, 31,
    31, 30, 31, 30, 31 };    public static int[] DAY_OF_MONTH_NON_LEAP_YEAR = { 31, 28, 31, 30, 31, 30,
    31, 31, 30, 31, 30, 31 };    public static void main(String[] args) {

    String  time = "2008-2-1";
    int day;
    int month;
    int year;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
    Date date = sdf.parse(time);
    Calendar   cal   =   Calendar.getInstance();   
    cal.setTime(date);  
    year = cal.get(cal.YEAR);
    month = cal.get(cal.MONTH);
            GregorianCalendar obj = new GregorianCalendar();
    if (obj.isLeapYear(year)) {
    day = DAY_OF_MONTH_LEAP_YEAR[month];
    } else {
    day = DAY_OF_MONTH_NON_LEAP_YEAR[month];
    }
    cal.set(year, month, day);
    Date last =  cal.getTime();
    System.out.println("LastDay:"+sdf.format(last));

    } catch (ParseException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    } }}
      

  4.   

    用Calendar
    8-1很好做,直接set一下DATE为1就好了
    8-31,看看add方法,直接对当前时间月份+1到9月,然后set到9月1日,然后add(Calendar.DATE,-1)//也就是减1天
      

  5.   

    谢谢大家  myydzhz()的真是好方法 学习………………
      

  6.   

    Calendar c = Calendar.getInstance();   
    c.set(c.YEAR, 2001);   
    c.set(c.MONTH, 0);   
    System.out.println(c.getActualMaximum(c.DAY_OF_MONTH));  //一个月的最大天数 
    System.out.println(c.getActualMinimum(c.DAY_OF_MONTH));  //一个月的最小天数
      

  7.   

    int year = 2007;
    int month = 8;
    Calendar c = new GregorianCalendar(year, month - 1, 1);
    c.set(Calendar.DATE, c.getActualMinimum(Calendar.DATE));
    System.out.printf("%d年%d月的第一天是: %tF%n", year, month, c);
    c.set(Calendar.DATE, c.getActualMaximum(Calendar.DATE));
    System.out.printf("%d年%d月的最后一天是: %tF%n", year, month, c);
      

  8.   

    可以参考一下我这个日历:
    http://user.qzone.qq.com/197428/blog/3
      

  9.   

    用Calendar类最容易解决这个问题
    首先获得2007-8-8的月份,然后获取该月的第一天和最后一天,
    用Calendar类不需要你去判断这个月是大月或者小月还是闰年2月
      

  10.   

    getActualMaximum
    public int getActualMaximum(int field)考虑到给定的时间值和 getFirstDayOfWeek、getMinimalDaysInFirstWeek、getGregorianChange 和 getTimeZone 方法的当前值,返回此日历字段可能具有的最大值。例如,如果此实例的日期是 2004 年 2 月 1 日,则 DAY_OF_MONTH 字段的实际最大值是 29,因为 2004 年是闰年;如果此实例的日期是 2005 年 2 月 1 日,则最大值是 28。
      

  11.   

    myydzhz() 的方法是很好,但是其中的last.toLocaleString());方法已经过时了,建议改为如下:package test1;import java.text.DateFormat;
    import java.text.SimpleDateFormat;public class Test17 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO 自动生成方法存根
    int year=2007;
    int month=2;
    DateFormat df=new SimpleDateFormat("yy-MM-dd");
    java.util.Calendar c=java.util.Calendar.getInstance();
    c.set(year,month-1,1);
    java.util.Date first=c.getTime();
    c.set(year,month,0);
    java.util.Date last=c.getTime();
    System.out.println(df.format(first));
    System.out.println(df.format(last)); }}
      

  12.   

    引用

    vitamins() ( ) 信誉:100  2007-8-14 10:32:41  得分: 0  
     
     
       
    LZ可以写一下自己写一下吗?这个不会太难的,不过你要注意想2月,之类的!!!
    }这里面其实有很多人都是刚开始学习的..并不是所谓的"懒"!  
     
      

  13.   

    lv810() ( ) 信誉:100  2007-8-14 13:57:54  得分: 0  
     
       
    Calendar c = Calendar.getInstance();   
    c.set(c.YEAR, 2001);   
    c.set(c.MONTH, 0);   
    System.out.println(c.getActualMaximum(c.DAY_OF_MONTH));  //一个月的最大天数 
    System.out.println(c.getActualMinimum(c.DAY_OF_MONTH));  //一个月的最小天数
    正解!!
    现成的API不要,非要自已写,累!!!
      
     
      

  14.   

    tricolors() 方法正解,支持采用JDK提供的API
      

  15.   

    chenyifei211() 正解
    lv810() 考虑到有闰年的情况没有?