用java如何计算两个日期之间年数、季度数、月数? 

解决方案 »

  1.   

    参考Calendar类
    ----ip围观党党员三十三号建议
      

  2.   

    看看  GregorianCalendar api 
      

  3.   


    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;public class DateUtil {
    // 一天的毫秒数 60*60*1000*24
    private final static long DAY_MILLIS = 86400000; // 一小时的毫秒数 60*60*1000
    private final static long HOUR_MILLIS = 3600000; // 一分钟的毫秒数 60*1000
    private final static long MINUTE_MILLIS = 60000;

    //日期格式化串
    private final static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static void main(String[] args) throws Exception{
    // 开始时间
    Date startdate = DATE_FORMAT.parse("2010-01-01 08:01:00");
    // 结束时间
    Date enddate = DATE_FORMAT.parse("2010-01-03 00:00:00"); showTimedif(startdate, enddate); Calendar start = Calendar.getInstance();
    start.setTime(startdate); Calendar end = Calendar.getInstance();
    end.setTime(enddate); showTimedif(start, end);
    } public static void showTimedif(Date start, Date end) {
    show(start.getTime(),end.getTime());
    } public static void showTimedif(Calendar start, Calendar end) {
    show(start.getTimeInMillis(),end.getTimeInMillis());
    } /**
     * 计算两个日期相差的天、小时、分钟
     * 
     * @param start
     * @param end
     */
    public static void show(long start, long end) {
    long temp = end - start;
    System.out.print(DATE_FORMAT.format(new Date(start)) + " 与 " + DATE_FORMAT.format(new Date(end)));
    System.out.println("相差" + temp / DAY_MILLIS + "天" + 
    (temp % DAY_MILLIS)/ HOUR_MILLIS + "小时" + 
    ((temp % DAY_MILLIS) % HOUR_MILLIS)/ MINUTE_MILLIS + "分");
    }
    }
      

  4.   

    您好,详细的代码如下,希望对你有帮助
    我刚学Java的时候在CSDN上搜的
    原址http://blog.csdn.net/shuchengzhang/archive/2009/07/11/4339993.aspx
    import java.text.DateFormat;    
    import java.text.ParsePosition;    
    import java.text.SimpleDateFormat;    
    import java.util.Calendar;    
    import java.util.Date;    
    import java.util.GregorianCalendar;    
       
    public class TimeTest {    
        //用来全局控制 上一周,本周,下一周的周数变化    
        private  int weeks = 0;    
        private int MaxDate;//一月最大天数    
        private int MaxYear;//一年最大天数    
            
            
        /**   
         * @param args   
         */   
        public static void main(String[] args) {    
            TimeTest tt = new TimeTest();    
            System.out.println("获取当天日期:"+tt.getNowTime("yyyy-MM-dd"));    
            System.out.println("获取本周一日期:"+tt.getMondayOFWeek());    
            System.out.println("获取本周日的日期~:"+tt.getCurrentWeekday());    
            System.out.println("获取上周一日期:"+tt.getPreviousWeekday());    
            System.out.println("获取上周日日期:"+tt.getPreviousWeekSunday());    
            System.out.println("获取下周一日期:"+tt.getNextMonday());    
            System.out.println("获取下周日日期:"+tt.getNextSunday());    
            System.out.println("获得相应周的周六的日期:"+tt.getNowTime("yyyy-MM-dd"));    
            System.out.println("获取本月第一天日期:"+tt.getFirstDayOfMonth());    
            System.out.println("获取本月最后一天日期:"+tt.getDefaultDay());    
            System.out.println("获取上月第一天日期:"+tt.getPreviousMonthFirst());    
            System.out.println("获取上月最后一天的日期:"+tt.getPreviousMonthEnd());    
            System.out.println("获取下月第一天日期:"+tt.getNextMonthFirst());    
            System.out.println("获取下月最后一天日期:"+tt.getNextMonthEnd());    
            System.out.println("获取本年的第一天日期:"+tt.getCurrentYearFirst());    
            System.out.println("获取本年最后一天日期:"+tt.getCurrentYearEnd());    
            System.out.println("获取去年的第一天日期:"+tt.getPreviousYearFirst());    
            System.out.println("获取去年的最后一天日期:"+tt.getPreviousYearEnd());    
            System.out.println("获取明年第一天日期:"+tt.getNextYearFirst());    
            System.out.println("获取明年最后一天日期:"+tt.getNextYearEnd());    
            System.out.println("获取本季度第一天到最后一天:"+tt.getThisSeasonTime(11));    
            System.out.println("获取两个日期之间间隔天数2008-12-1~2008-9.29:"+TimeTest.getTwoDay("2008-12-1","2008-9-29"));    
        }    
       
      

  5.   


        /**   
            * 得到二个日期间的间隔天数   
            */   
        public static String getTwoDay(String sj1, String sj2) {    
            SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");    
            long day = 0;    
            try {    
             java.util.Date date = myFormatter.parse(sj1);    
             java.util.Date mydate = myFormatter.parse(sj2);    
             day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);    
            } catch (Exception e) {    
             return "";    
            }    
            return day + "";    
        }    
       
       
        /**   
            * 根据一个日期,返回是星期几的字符串   
            *    
            * @param sdate   
            * @return   
            */   
        public static String getWeek(String sdate) {    
            // 再转换为时间    
            Date date = TimeTest.strToDate(sdate);    
            Calendar c = Calendar.getInstance();    
            c.setTime(date);    
            // int hour=c.get(Calendar.DAY_OF_WEEK);    
            // hour中存的就是星期几了,其范围 1~7    
            // 1=星期日 7=星期六,其他类推    
            return new SimpleDateFormat("EEEE").format(c.getTime());    
        }    
       
        /**   
            * 将短时间格式字符串转换为时间 yyyy-MM-dd    
            *    
            * @param strDate   
            * @return   
            */   
        public static Date strToDate(String strDate) {    
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");    
            ParsePosition pos = new ParsePosition(0);    
            Date strtodate = formatter.parse(strDate, pos);    
            return strtodate;    
        }    
       
        /**   
            * 两个时间之间的天数   
            *    
            * @param date1   
            * @param date2   
            * @return   
            */   
        public static long getDays(String date1, String date2) {    
            if (date1 == null || date1.equals(""))    
             return 0;    
            if (date2 == null || date2.equals(""))    
             return 0;    
            // 转换为标准时间    
            SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");    
            java.util.Date date = null;    
            java.util.Date mydate = null;    
            try {    
             date = myFormatter.parse(date1);    
             mydate = myFormatter.parse(date2);    
            } catch (Exception e) {    
            }    
            long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);    
            return day;    
        }    
       
       
       
            
        // 计算当月最后一天,返回字符串    
        public String getDefaultDay(){      
           String str = "";    
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");        
       
           Calendar lastDate = Calendar.getInstance();    
           lastDate.set(Calendar.DATE,1);//设为当前月的1号    
           lastDate.add(Calendar.MONTH,1);//加一个月,变为下月的1号    
           lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天    
               
           str=sdf.format(lastDate.getTime());    
           return str;      
        }    
            
        // 上月第一天    
        public String getPreviousMonthFirst(){      
           String str = "";    
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");        
       
           Calendar lastDate = Calendar.getInstance();    
           lastDate.set(Calendar.DATE,1);//设为当前月的1号    
           lastDate.add(Calendar.MONTH,-1);//减一个月,变为下月的1号    
           //lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天    
               
           str=sdf.format(lastDate.getTime());    
           return str;      
        }    
            
        //获取当月第一天    
        public String getFirstDayOfMonth(){      
           String str = "";    
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");        
       
           Calendar lastDate = Calendar.getInstance();    
           lastDate.set(Calendar.DATE,1);//设为当前月的1号    
           str=sdf.format(lastDate.getTime());    
           return str;      
        }    
            
        // 获得本周星期日的日期      
        public String getCurrentWeekday() {    
            weeks = 0;    
            int mondayPlus = this.getMondayPlus();    
            GregorianCalendar currentDate = new GregorianCalendar();    
            currentDate.add(GregorianCalendar.DATE, mondayPlus+6);    
            Date monday = currentDate.getTime();    
                
            DateFormat df = DateFormat.getDateInstance();    
            String preMonday = df.format(monday);    
            return preMonday;    
        }    
            
            
        //获取当天时间     
        public String getNowTime(String dateformat){    
            Date   now   =   new   Date();       
            SimpleDateFormat   dateFormat   =   new   SimpleDateFormat(dateformat);//可以方便地修改日期格式       
            String  hehe  = dateFormat.format(now);       
            return hehe;    
        }    
            
        // 获得当前日期与本周日相差的天数    
        private int getMondayPlus() {    
            Calendar cd = Calendar.getInstance();    
            // 获得今天是一周的第几天,星期日是第一天,星期二是第二天......    
            int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK)-1;         //因为按中国礼拜一作为第一天所以这里减1    
            if (dayOfWeek == 1) {    
                return 0;    
            } else {    
                return 1 - dayOfWeek;    
            }    
        }    
            
        //获得本周一的日期    
        public String getMondayOFWeek(){    
             weeks = 0;    
             int mondayPlus = this.getMondayPlus();    
             GregorianCalendar currentDate = new GregorianCalendar();    
             currentDate.add(GregorianCalendar.DATE, mondayPlus);    
             Date monday = currentDate.getTime();    
                 
             DateFormat df = DateFormat.getDateInstance();    
             String preMonday = df.format(monday);    
             return preMonday;    
        }    
            
      //获得相应周的周六的日期    
        public String getSaturday() {    
            int mondayPlus = this.getMondayPlus();    
            GregorianCalendar currentDate = new GregorianCalendar();    
            currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6);    
            Date monday = currentDate.getTime();    
            DateFormat df = DateFormat.getDateInstance();    
            String preMonday = df.format(monday);    
            return preMonday;    
        }    
            
     // 获得上周星期日的日期    
        public String getPreviousWeekSunday() {    
            weeks=0;    
            weeks--;    
            int mondayPlus = this.getMondayPlus();    
            GregorianCalendar currentDate = new GregorianCalendar();    
            currentDate.add(GregorianCalendar.DATE, mondayPlus+weeks);    
            Date monday = currentDate.getTime();    
            DateFormat df = DateFormat.getDateInstance();    
            String preMonday = df.format(monday);    
            return preMonday;    
        }    
       
     // 获得上周星期一的日期    
        public String getPreviousWeekday() {    
            weeks--;    
            int mondayPlus = this.getMondayPlus();    
            GregorianCalendar currentDate = new GregorianCalendar();    
            currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks);    
            Date monday = currentDate.getTime();    
            DateFormat df = DateFormat.getDateInstance();    
            String preMonday = df.format(monday);    
            return preMonday;    
        }    
            
        // 获得下周星期一的日期    
        public String getNextMonday() {    
            weeks++;    
            int mondayPlus = this.getMondayPlus();    
            GregorianCalendar currentDate = new GregorianCalendar();    
            currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);    
            Date monday = currentDate.getTime();    
            DateFormat df = DateFormat.getDateInstance();    
            String preMonday = df.format(monday);    
            return preMonday;    
        }    
            
     // 获得下周星期日的日期    
        public String getNextSunday() {    
                
            int mondayPlus = this.getMondayPlus();    
            GregorianCalendar currentDate = new GregorianCalendar();    
            currentDate.add(GregorianCalendar.DATE, mondayPlus + 7+6);    
            Date monday = currentDate.getTime();    
            DateFormat df = DateFormat.getDateInstance();    
            String preMonday = df.format(monday);    
            return preMonday;    
        }    
            
            
            
        private int getMonthPlus(){    
            Calendar cd = Calendar.getInstance();    
            int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH);    
            cd.set(Calendar.DATE, 1);//把日期设置为当月第一天     
            cd.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天     
            MaxDate=cd.get(Calendar.DATE);     
            if(monthOfNumber == 1){    
                return -MaxDate;    
            }else{    
                return 1-monthOfNumber;    
            }    
        }    
            
      
      

  6.   


    //获得上月最后一天的日期    
        public String getPreviousMonthEnd(){    
            String str = "";    
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");        
       
           Calendar lastDate = Calendar.getInstance();    
          lastDate.add(Calendar.MONTH,-1);//减一个月    
          lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天     
          lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天     
           str=sdf.format(lastDate.getTime());    
           return str;      
        }    
            
      //获得下个月第一天的日期    
        public String getNextMonthFirst(){    
            String str = "";    
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");        
       
           Calendar lastDate = Calendar.getInstance();    
          lastDate.add(Calendar.MONTH,1);//减一个月    
          lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天     
           str=sdf.format(lastDate.getTime());    
           return str;      
        }    
            
      //获得下个月最后一天的日期    
        public String getNextMonthEnd(){    
            String str = "";    
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");        
       
           Calendar lastDate = Calendar.getInstance();    
          lastDate.add(Calendar.MONTH,1);//加一个月    
          lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天     
          lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天     
           str=sdf.format(lastDate.getTime());    
           return str;      
        }    
            
        //获得明年最后一天的日期    
        public String getNextYearEnd(){    
            String str = "";    
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");        
       
          Calendar lastDate = Calendar.getInstance();    
          lastDate.add(Calendar.YEAR,1);//加一个年    
          lastDate.set(Calendar.DAY_OF_YEAR, 1);    
         lastDate.roll(Calendar.DAY_OF_YEAR, -1);    
           str=sdf.format(lastDate.getTime());    
           return str;      
        }    
            
      //获得明年第一天的日期    
        public String getNextYearFirst(){    
            String str = "";    
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");        
       
          Calendar lastDate = Calendar.getInstance();    
          lastDate.add(Calendar.YEAR,1);//加一个年    
          lastDate.set(Calendar.DAY_OF_YEAR, 1);    
               str=sdf.format(lastDate.getTime());    
          return str;      
                
        }    
            
      //获得本年有多少天    
        private int getMaxYear(){    
            Calendar cd = Calendar.getInstance();    
            cd.set(Calendar.DAY_OF_YEAR,1);//把日期设为当年第一天    
            cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滚一天。    
            int MaxYear = cd.get(Calendar.DAY_OF_YEAR);     
            return MaxYear;    
        }    
            
        private int getYearPlus(){    
            Calendar cd = Calendar.getInstance();    
            int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);//获得当天是一年中的第几天    
            cd.set(Calendar.DAY_OF_YEAR,1);//把日期设为当年第一天    
            cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滚一天。    
            int MaxYear = cd.get(Calendar.DAY_OF_YEAR);    
            if(yearOfNumber == 1){    
                return -MaxYear;    
            }else{    
                return 1-yearOfNumber;    
            }    
        }    
      //获得本年第一天的日期    
        public String getCurrentYearFirst(){    
            int yearPlus = this.getYearPlus();    
            GregorianCalendar currentDate = new GregorianCalendar();    
            currentDate.add(GregorianCalendar.DATE,yearPlus);    
            Date yearDay = currentDate.getTime();    
            DateFormat df = DateFormat.getDateInstance();    
            String preYearDay = df.format(yearDay);    
            return preYearDay;    
        }    
            
            
      //获得本年最后一天的日期 *    
        public String getCurrentYearEnd(){    
            Date date = new Date();    
            SimpleDateFormat   dateFormat   =   new   SimpleDateFormat("yyyy");//可以方便地修改日期格式       
            String  years  = dateFormat.format(date);       
            return years+"-12-31";    
        }    
            
            
      //获得上年第一天的日期 *    
        public String getPreviousYearFirst(){    
            Date date = new Date();    
            SimpleDateFormat   dateFormat   =   new   SimpleDateFormat("yyyy");//可以方便地修改日期格式       
            String  years  = dateFormat.format(date); int years_value = Integer.parseInt(years);      
            years_value--;    
            return years_value+"-1-1";    
        }    
            
      //获得上年最后一天的日期    
        public String getPreviousYearEnd(){    
            weeks--;    
            int yearPlus = this.getYearPlus();    
            GregorianCalendar currentDate = new GregorianCalendar();    
            currentDate.add(GregorianCalendar.DATE,yearPlus+MaxYear*weeks+(MaxYear-1));    
            Date yearDay = currentDate.getTime();    
            DateFormat df = DateFormat.getDateInstance();    
            String preYearDay = df.format(yearDay);    
            getThisSeasonTime(11);    
            return preYearDay;    
        }    
            
      

  7.   

    好长,我也刚学Java不久,感觉有点纠结。
      

  8.   

    看看API 掌握日期类中的相关方法。
      

  9.   

    看看API 掌握日期类中的相关方法。