时间工具类--java

来源:互联网 发布:中国农村现状知乎 编辑:程序博客网 时间:2024/05/22 00:41
packagecom.dayatang.utils;
 
importjava.security.InvalidParameterException;
importjava.text.ParseException;
importjava.util.Calendar;
importjava.util.Date;
 
publicclass DateUtils {
 
    privatestatic final long MILLIS_IN_A_SECOND = 1000;
 
    privatestatic final long SECONDS_IN_A_MINUTE = 60;
 
    privatestatic final long MINUTES_IN_AN_HOUR = 60;
 
    privatestatic final long HOURS_IN_A_DAY = 24;
 
    privatestatic final int DAYS_IN_A_WEEK = 7;
 
    privatestatic final int MONTHS_IN_A_YEAR = 12;
 
    //private static final int[] daysInMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
    /**
     * 最小日期,设定为1000年1月1日
     */
    publicstatic final Date MIN_DATE = date(1000,1,1);
 
    /**
     * 最大日期,设定为8888年1月1日
     */
    publicstatic final Date MAX_DATE = date(8888,1,1);
     
 
    /**
     * 根据年月日构建日期对象。注意月份是从1开始计数的,即month为1代表1月份。
     * @param year 年
     * @param month 月。注意1代表1月份,依此类推。
     * @param day 日
     * @return
     */
    publicstatic Date date(intyear, intmonth, intdate) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month - 1, date, 0,0,0);
        calendar.set(Calendar.MILLISECOND,0);
        returncalendar.getTime();
    }
     
    /**
     * 计算两个日期(不包括时间)之间相差的周年数
     *
     * @param date1
     * @param date2
     * @return
     */
    publicstatic int getYearDiff(Date date1, Date date2) {
        if(date1 == null|| date2 == null) {
            thrownew InvalidParameterException(
                    "date1 and date2 cannot be null!");
        }
        if(date1.after(date2)) {
            thrownew InvalidParameterException("date1 cannot be after date2!");
        }
 
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date1);
        intyear1 = calendar.get(Calendar.YEAR);
        intmonth1 = calendar.get(Calendar.MONTH);
        intday1 = calendar.get(Calendar.DATE);
 
        calendar.setTime(date2);
        intyear2 = calendar.get(Calendar.YEAR);
        intmonth2 = calendar.get(Calendar.MONTH);
        intday2 = calendar.get(Calendar.DATE);
 
        intresult = year2 - year1;
        if(month2 < month1) {
            result--;
        }elseif (month2 == month1 && day2 < day1) {
            result--;
        }
        returnresult;
    }
 
    /**
     * 计算两个日期(不包括时间)之间相差的整月数
     *
     * @param date1
     * @param date2
     * @return
     */
    publicstatic int getMonthDiff(Date date1, Date date2) {
        if(date1 == null|| date2 == null) {
            thrownew InvalidParameterException(
                    "date1 and date2 cannot be null!");
        }
        if(date1.after(date2)) {
            thrownew InvalidParameterException("date1 cannot be after date2!");
        }
 
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date1);
        intyear1 = calendar.get(Calendar.YEAR);
        intmonth1 = calendar.get(Calendar.MONTH);
        intday1 = calendar.get(Calendar.DATE);
 
        calendar.setTime(date2);
        intyear2 = calendar.get(Calendar.YEAR);
        intmonth2 = calendar.get(Calendar.MONTH);
        intday2 = calendar.get(Calendar.DATE);
 
        intmonths = 0;
        if(day2 >= day1) {
            months = month2 - month1;
        }else{
            months = month2 - month1 - 1;
        }
        return(year2 - year1) * MONTHS_IN_A_YEAR + months;
    }
 
    /**
     * 统计两个日期之间包含的天数。包含date1,但不包含date2
     *
     * @param date1
     * @param date2
     * @return
     */
    publicstatic int getDayDiff(Date date1, Date date2) {
        if(date1 == null|| date2 == null) {
            thrownew InvalidParameterException(
                    "date1 and date2 cannot be null!");
        }
        Date startDate = org.apache.commons.lang3.time.DateUtils.truncate(
                date1, Calendar.DATE);
        Date endDate = org.apache.commons.lang3.time.DateUtils.truncate(date2,
                Calendar.DATE);
        if(startDate.after(endDate)) {
            thrownew InvalidParameterException("date1 cannot be after date2!");
        }
        longmillSecondsInOneDay = HOURS_IN_A_DAY * MINUTES_IN_AN_HOUR
                * SECONDS_IN_A_MINUTE * MILLIS_IN_A_SECOND;
        return(int) ((endDate.getTime() - startDate.getTime()) / millSecondsInOneDay);
    }
 
    /**
     * 计算time2比time1晚多少分钟,忽略日期部分
     *
     * @param time1
     * @param time2
     * @return
     */
    publicstatic int getMinuteDiffByTime(Date time1, Date time2) {
        longstartMil = 0;
        longendMil = 0;
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(time1);
        calendar.set(1900,1,1);
        startMil = calendar.getTimeInMillis();
        calendar.setTime(time2);
        calendar.set(1900,1,1);
        endMil = calendar.getTimeInMillis();
        return(int) ((endMil - startMil) / MILLIS_IN_A_SECOND / SECONDS_IN_A_MINUTE);
    }
 
    /**
     * 计算指定日期的前一天
     *
     * @param date
     * @return
     */
    publicstatic Date getPrevDay(Date date) {
        returnorg.apache.commons.lang3.time.DateUtils.addDays(date, -1);
    }
 
    /**
     * 计算指定日期的后一天
     *
     * @param date
     * @return
     */
    publicstatic Date getNextDay(Date date) {
        returnorg.apache.commons.lang3.time.DateUtils.addDays(date, 1);
    }
 
    /**
     * 判断date1是否在date2之后,忽略时间部分
     *
     * @param date1
     * @param date2
     * @return
     */
    publicstatic boolean isDateAfter(Date date1, Date date2) {
        Date theDate1 = org.apache.commons.lang3.time.DateUtils.truncate(date1,
                Calendar.DATE);
        Date theDate2 = org.apache.commons.lang3.time.DateUtils.truncate(date2,
                Calendar.DATE);
        returntheDate1.after(theDate2);
    }
 
    /**
     * 判断date1是否在date2之前,忽略时间部分
     *
     * @param date1
     * @param date2
     * @return
     */
    publicstatic boolean isDateBefore(Date date1, Date date2) {
        returnisDateAfter(date2, date1);
    }
 
    /**
     * 判断time1是否在time2之后,忽略日期部分
     *
     * @param time1
     * @param time2
     * @return
     */
    publicstatic boolean isTimeAfter(Date time1, Date time2) {
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTime(time1);
        calendar1.set(1900,1,1);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTime(time2);
        calendar2.set(1900,1,1);
        returncalendar1.after(calendar2);
    }
 
    /**
     * 判断time1是否在time2之前,忽略日期部分
     *
     * @param time1
     * @param time2
     * @return
     */
    publicstatic boolean isTimeBefore(Date time1, Date time2) {
        returnisTimeAfter(time2, time1);
    }
 
    /**
     * 判断两个日期是否同一天(忽略时间部分)
     *
     * @param date1
     * @param date2
     * @return
     */
    publicstatic boolean isSameDay(Date date1, Date date2) {
        returnorg.apache.commons.lang3.time.DateUtils.isSameDay(date1, date2);
    }
 
    /**
     * 判断两个日历天是否同一天(忽略时间部分)
     *
     * @param date1
     * @param date2
     * @return
     */
    publicstatic boolean isSameDay(Calendar date1, Calendar date2) {
        returnorg.apache.commons.lang3.time.DateUtils.isSameDay(date1, date2);
    }
 
    /**
     * 将字符串形式的日期表示解析为日期对象
     *
     * @param dateString
     * @return
     */
    publicstatic Date parseDate(String dateString) {
        try{
            returnorg.apache.commons.lang3.time.DateUtils.parseDate(
                    dateString,newString[] { "yyyy-MM-dd","yyyy-M-d",
                            "yyyy-MM-d","yyyy-M-dd"});
        }catch(ParseException e) {
            returnnull;
        }
    }
 
    /**
     * 将字符串形式的时间表示解析为日期时间对象
     *
     * @param timeString
     * @return
     */
    publicstatic Date parseTime(String timeString) {
        try{
            returnorg.apache.commons.lang3.time.DateUtils.parseDate(
                    timeString,newString[] { "hh:mm:ss","h:m:s","hh:mm",
                            "h:m"});
        }catch(ParseException e) {
            returnnull;
        }
    }
 
    /**
     * 将字符串形式的日期时间表示解析为时间对象
     *
     * @param timeString
     * @return
     */
    publicstatic Date parseDateTime(String timeString) {
        try{
            returnorg.apache.commons.lang3.time.DateUtils.parseDate(
                    timeString,newString[] { "yyyy-MM-dd HH:mm:ss",
                            "yyyy-M-d H:m:s","yyyy-MM-dd H:m:s",
                            "yyyy-M-d HH:mm:ss" });
        }catch(ParseException e) {
            returnnull;
        }
    }
 
    /**
     * 计算两个日期之间包含的星期X的天数。
     *
     * @param fromDate
     *            起始日期
     * @param toDate
     *            结束日期
     * @param dayOfWeek
     *            星期,例如星期三,星期四
     * @return
     */
    publicstatic int getWeekDaysBetween(Date fromDate, Date toDate,
            intdayOfWeek) {
        intresult = 0;
        Date firstDate = getFirstWeekdayBetween(fromDate, toDate, dayOfWeek);
        if(firstDate == null) {
            return0;
        }
        Calendar aDay = Calendar.getInstance();
        aDay.setTime(firstDate);
        while(aDay.getTime().before(toDate)) {
            result++;
            aDay.add(Calendar.DATE, DAYS_IN_A_WEEK);
        }
        returnresult;
    }
 
    /**
     * 获取在两个日期之间的第一个星期X
     *
     * @param fromDate
     *            起始日期
     * @param toDate
     *            结束日期
     * @param dayOfWeek
     *            星期,例如星期三,星期四
     * @return
     */
    publicstatic Date getFirstWeekdayBetween(Date fromDate, Date toDate,
            intdayOfWeek) {
        Calendar aDay = Calendar.getInstance();
        aDay.setTime(fromDate);
        while(aDay.getTime().before(toDate)) {
            if(aDay.get(Calendar.DAY_OF_WEEK) == dayOfWeek) {
                returnaDay.getTime();
            }
            aDay.add(Calendar.DATE,1);
        }
        returnnull;
    }
 
    /**
     * 取得参数year指定的年份的总天数
     *
     * @param year
     * @return
     */
    publicstatic int getDaysInYear(intyear) {
        Calendar aDay = Calendar.getInstance();
        aDay.set(year,1,1);
        Date from = aDay.getTime();
        aDay.set(year + 1,1,1);
        Date to = aDay.getTime();
        returngetDayDiff(from, to);
    }
 
    /**
     * 取得指定年月的总天数
     *
     * @param year
     * @param month
     * @return
     */
    publicstatic int getDaysInMonth(intyear, intmonth) {
        Calendar aDay = Calendar.getInstance();
        aDay.set(year, month, 1);
        Date from = aDay.getTime();
        if(month == Calendar.DECEMBER) {
            aDay.set(year + 1, Calendar.JANUARY, 1);
        }else{
            aDay.set(year, month + 1,1);
        }
        Date to = aDay.getTime();
        returngetDayDiff(from, to);
    }
 
    /**
     * 获得指定日期的年份
     *
     * @param date
     * @return
     */
    publicstatic int getYear(Date date) {
        returngetFieldValue(date, Calendar.YEAR);
    }
 
    /**
     * 获得指定日期的月份
     *
     * @param date
     * @return
     */
    publicstatic int getMonth(Date date) {
        returngetFieldValue(date, Calendar.MONTH) + 1;
    }
 
    /**
     * 获得指定日期是当年的第几天
     *
     * @param date
     * @return
     */
    publicstatic int getDayOfYear(Date date) {
        returngetFieldValue(date, Calendar.DAY_OF_YEAR);
    }
 
    /**
     * 获得指定日期是当月的第几天
     *
     * @param date
     * @return
     */
    publicstatic int getDayOfMonth(Date date) {
        returngetFieldValue(date, Calendar.DAY_OF_MONTH);
    }
 
    /**
     * 获得指定日期是当周的第几天
     *
     * @param date
     * @return
     */
    publicstatic int getDayOfWeek(Date date) {
        returngetFieldValue(date, Calendar.DAY_OF_WEEK);
    }
 
    privatestatic int getFieldValue(Date date, intfield) {
        if(date == null) {
            thrownew InvalidParameterException("date cannot be null!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        returncalendar.get(field);
    }
 
    /**
     * 获得指定日期之后一段时期的日期。例如某日期之后3天的日期等。
     * @param origDate 基准日期
     * @param amount 时间数量
     * @param timeUnit 时间单位,如年、月、日等。用Calendar中的常量代表
     * @return
     */
    publicstatic final Date dateAfter(Date origDate, intamount, inttimeUnit) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(origDate);
        calendar.add(timeUnit, amount);
        returncalendar.getTime();
    }
 
    /**
     * 获得指定日期之前一段时期的日期。例如某日期之前3天的日期等。
     * @param origDate 基准日期
     * @param amount 时间数量
     * @param timeUnit 时间单位,如年、月、日等。用Calendar中的常量代表
     * @return
     */
    publicstatic final Date dateBefore(Date origDate, intamount, inttimeUnit) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(origDate);
        calendar.add(timeUnit, -amount);
        returncalendar.getTime();
    }
}
0 0
原创粉丝点击