Java常用的时间工具类DateTimeUtils.java对常用的时间操作方法总结

话不多少,直接上代码!时间工具类DateTimeUtils.java 汇总了以前常用的时间操作方法!

工具类方法列表:

  1. 将 String 转为 date
  2. 日期字符串格式化输出
  3. Date类型日期转字符串格式化输出
  4. 增加天数后的Date日期
  5. 计算日期{@link Date}增加某天数后的Date类型日期
  6. 减少天数后的日期
  7. 增加月数后的日期
  8. 减少月数后的日期
  9. 减少年数后的日期
  10. 计算月份差
  11. 计算两个日期的间隔天数/比较日期大小
  12. 计算两个时间的毫秒间隔
  13. 计算两个时间的  分钟差
  14. 判断是否为交易日/工作日
  15. 判断是否是周末
  16. 判断是否为国家法定节假日
  17. 判断是否为国家调整后的工作日
  18. 获得时间指定时间差值 日期
  19. 判断目标时间是否在区间内
  20. 获取当前8位系统日期
  21. 获取当前6位系统时间
  22. 获取当前14位系统日期时间
  23. 按指定格式获取当前系统日期时间
  24. 获取字符串start到end天数间隔
  25. 获取Date日期类型start到end天数间隔

还有其他操作,逐步补充中 .......

package com....;import org.apache.commons.lang3.StringUtils;import org.joda.time.DateTime;import org.joda.time.Days;import org.joda.time.LocalDate;import org.joda.time.format.DateTimeFormat;import org.joda.time.format.DateTimeFormatter;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;/**  * @version V1.0 * @File: DateUtils * @Description: 常用的时间处理方法集合工具类  * @author: aitree  */public class DateUtils {    /**     * 时间格式常量     */    public static final String COMMON_PATTERN       = "yyyy-MM-dd HH:mm:ss";    public static final String COMMON_PATTERN_TYPE2 = "yyyy/MM/dd HH:mm:ss";    public static final String SHORT_PATTERN        = "yyyy-MM-dd";    public static final String SHORT_PATTERN_TYPE2  = "yyyy/MM/dd";    public static final String LONG_PATTERN         = "yyyy-MM-dd HH:mm:ss.SSS";    public static final String SUP_SHORT_PATTERN    = "yyyyMMdd";    public static final String SUP_LONG_PATTERN     = "yyyyMMddHHmmss";    public static final String YEAR_MONTH           = "yyyyMM";    public static final String CN_SHORT_PATTERN     = "yyyy年MM月dd日";    public static final String DDMM_PATTERN         = "ddMM";    /**     * 1、将 String 解析为 date     *     * @param dateString 待解析的日期字符串     * @param pattern    日期字符串的时间格式     * @return     */    public static Date trans2Date(String dateString, String pattern) {        String fRTN = StringUtils.isNotBlank(pattern) ? pattern : COMMON_PATTERN;        DateTimeFormatter format = DateTimeFormat.forPattern(fRTN);        DateTime dt = DateTime.parse(dateString, format);        return dt.toDate();    }    /**     */2、日期字符串格式化输出     *     * @param dateString  待格式化的日期字符串     * @param fromPattern 待格式化日期字符串的格式     * @param toPattern   格式化后的日期格式     * @return     */    public static String formatDate2String(String dateString, String fromPattern, String toPattern) {        String tRTN = StringUtils.isNotBlank(toPattern) ? toPattern : COMMON_PATTERN;        DateTimeFormatter format = DateTimeFormat.forPattern(fromPattern);        DateTime dt = DateTime.parse(dateString, format);        return dt.toString(tRTN);    }    /**     * 3、Date类型日期转字符串格式化输出     *     * @param date    待格式化的日期     * @param pattern 格式化后的格式     * @return     */    public static String formatDate2String(Date date, String pattern) {        String fRTN = StringUtils.isNotBlank(pattern) ? pattern : COMMON_PATTERN;        DateTimeFormatter format = DateTimeFormat.forPattern(fRTN);        return new DateTime(date).toString(format);    }    /**     * 4、增加天数后的Date日期     *     * @param date      起点日期(date/string)     * @param daysCount 增加天数     * @return     */    public static <T> Date add(T date, int daysCount) {        DateTime dt = new DateTime(date);        return dt.plusDays(daysCount).toDate();    }    /**     * 5、计算日期{@link Date}增加某天数后的Date类型日期     *     * @param d           Date     * @param amountToAdd 天数增加值     * @return Date     */    public static Date plusDays(Date d, long amountToAdd) {         return toDate(plusDays(toLocalDateTime(d), amountToAdd));    }    public static LocalDateTime plusDays(LocalDateTime ldt, long amountToAdd) {         return ldt.plusDays(amountToAdd);    }    /**     *6、减少天数后的日期     *     * @param date      起点日期(date/string)     * @param daysCount 减少的天数     * @return     */    public static <T> Date sub(T date, int daysCount) {        DateTime dt = new DateTime(date);        return dt.minusDays(daysCount).toDate();    }    /**     * 7、增加月数后的日期     *     * @param date      起点日期(date/string)     * @param months    增加月数     * @return     */    public static <T> Date addMonths(T date, int months) {        DateTime dt = new DateTime(date);        return dt.plusMonths(months).toDate();    }    /**     */8、减少月数后的日期     *     * @param date      起点日期(date/string)     * @param months    减少的月数     * @return     */    public static <T> Date subMonths(T date, int months) {        DateTime dt = new DateTime(date);        return dt.minusMonths(months).toDate();    }    /**     */9、减少年数后的日期     *     * @param date      起点日期(date/string)     * @param years     减少的年数     * @return     */    public static <T> Date subYears(T date, int years) {        DateTime dt = new DateTime(date);        return dt.minusYears(years).toDate();    }    /**     * 10、计算月份差     * @param lastRepaymentDate     * @param fundLoanDate     * @return     */    public static int getMonthParse(String lastRepaymentDate, String fundLoanDate) throws ParseException {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");        Calendar bef = Calendar.getInstance();        Calendar aft = Calendar.getInstance();        bef.setTime(sdf.parse(fundLoanDate));        aft.setTime(sdf.parse(lastRepaymentDate));        int result = aft.get(Calendar.MONTH) - bef.get(Calendar.MONTH);        int month = (aft.get(Calendar.YEAR) - bef.get(Calendar.YEAR))*12;        return month+result;    }    /**     * 11、计算两个日期的间隔天数     * 目前不对两个日期比较大小,如放错顺序,则结果为负数的天数     *     * @param dateMin 起点日期(date/string)     * @param dateMax 结束日期(date/string)     * @return     */    public static <T> int betweenDays(T dateMin, T dateMax) {        LocalDate start = new LocalDate(dateMin);        LocalDate end = new LocalDate(dateMax);        return Days.daysBetween(start, end).getDays();    }    /**     * 12、计算两个时间的毫秒间隔     * 目前不对两个时间参数比较大小,如放错顺序,则结果为负数的毫秒间隔     *     * @param dateMin 起点日期(date/string)     * @param dateMax 结束日期(date/string)     * @return     */    public static <T> long betweenMs(T dateMin, T dateMax) {        DateTime start = new DateTime(dateMin);        DateTime end = new DateTime(dateMax);        return end.getMillis() - start.getMillis();    }    /**     * 13、判断是否为交易日/工作日     *     * @param date 待判断日期(date/string)     * @return     */    public static <T> boolean isTradeDay(T date) {        boolean isTD = false;        DateTime dt = new DateTime(date);        if (isSpWorkDay(dt) || (!isHoliday(dt) && !isWeekEnd(dt))) {            isTD = true;        }        return isTD;    }
//14、判断是否是周末*/    private static boolean isWeekEnd(DateTime dt) {        boolean isWE = false;        int wd = dt.dayOfWeek().get();        switch (wd) {            case 6:            case 7:                isWE = true;                break;            default:                break;        }        return isWE;    }    //15、判断是否为国家法定节假日*/    private static boolean isHoliday(DateTime dt) {        boolean isHD = false;        //TODO:get days from redis        List<String> holidayList = new ArrayList<String>();        if (holidayList != null) {            for (String holiday : holidayList) {                if (dt.isEqual(new DateTime(holiday))) {                    isHD = true;                    break;                }            }        }        return isHD;    }    //16、判断是否为国家调整后的工作日*/    private static boolean isSpWorkDay(DateTime dt) {        boolean isSpWD = false;        //TODO:get days from redis        List<String> spWorkDayList = new ArrayList<String>();        if (spWorkDayList != null) {            for (String spWorkDay : spWorkDayList) {                if (dt.isEqual(new DateTime(spWorkDay))) {                    isSpWD = true;                    break;                }            }        }        return isSpWD;    }    /**     */17、获得时间指定时间差值 日期     * @param: aDate     * @param: field 查看  Calendar.MINUTE  、SECOND     * @param: diff 时间差     * @return:     */    public static final Date diffDate(Date aDate, int field, int diff) {        Calendar cal = Calendar.getInstance();        cal.setTime(aDate);        cal.add(field, diff);        return cal.getTime();    }    /**     * 18、判断目标时间是否在区间内     * @param sDate 开始时间date/string     * @param eDate 结束时间date/string     * @param cDate 目标时间date/string     * @param <T>     * @return     */    public static <T> boolean isInRange(T sDate, T eDate, T cDate){        DateTime dtLow = new DateTime(sDate);        DateTime dtHigh = new DateTime(eDate);        DateTime dt = new DateTime(cDate);        if(dt.getMillis()>=dtLow.getMillis() && dt.getMillis()<=dtHigh.getMillis()){            return true;        }        return false;    }    public static <T> boolean isInRange(){        DateTime now = DateTime.now();        return isInRange(now,now,now);    }    public static <T> boolean isInRange(T sDate, T eDate){        DateTime now = DateTime.now();        return isInRange(sDate,eDate,now);    }   /**    * 19、获取当前8位系统日期    *    * @return yyyyMMdd    */   public static String getCurrentDateStr() {       return format(LocalDate.now());   }   /**    */20、获取当前6位系统时间    *    * @return HHmmss    */   public static String getCurrentTimeStr() {       return format(LocalTime.now());   }   /**    */21、获取当前14位系统日期时间    *    * @return yyyyMMddHHmmss    */   public static String getCurrentDateTimeStr() {       return format(LocalDateTime.now());   }   /**    */22、按指定格式获取当前系统日期时间    *    * @param pattern pattern    * @return 格式化的当前系统日期时间    */   public static String getCurrentDateTimeStr(String pattern) {      return format(LocalDateTime.now(), pattern);   }   /**   */23、获取字符串start到end天数间隔   *   * @param start 开始日期,YYYYMMDD   * @param end   结束日期,YYYYMMDD   * @return 天数间隔   */   public static long getDaysBetweenDate(String start, String end) {       return toLocalDate(start).until(toLocalDate(end), ChronoUnit.DAYS);   }      /**    */24、获取Date日期类型start到end天数间隔    *    * @param start 开始日期    * @param end   结束日期    * @return 天数间隔    */   public static long getDaysBetween(Date start, Date end) {       return getDaysBetween(toLocalDate(start), toLocalDate(end));   }   public static LocalDate toLocalDate(Date d) {      return toLocalDateTime(d).toLocalDate();   }}

时间减法(示例):

public static void main(String[] args) throws ParseException {        //一、时间减法可以用Calendar对象加法中,把第二个参数换成负数可以时间,这边就不列举了;使用第二种方式做时间减法        //1、指定两个Date对象,业务中可以以参数的形式传递,不用new当前时间。        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        Date nowDate = new Date(); //当前时间        String yesterday = "2020-10-29 12:35:28";        Date yesterdayDate = dateFormat.parse(yesterday);//假设一个时间,工作业务中可以参数传递的形式来获取。        //2、时间戳相减        long yesterdayDateTime = yesterdayDate.getTime();//昨天的时间戳        long nowDateTime = nowDate.getTime();//当前时间戳        int result = (int) (nowDateTime - yesterdayDateTime);//毫秒        //3、换算成秒        int diffSecond = result / 1000; //1000毫秒等于1秒        System.out.println(diffSecond); //108296 秒        //4、换算成分钟        int diffMinute = result / 1000 / 60;//60秒等于1分钟        System.out.println(diffMinute);//1805 分钟        //5、换算成是小时        int diffHour = result / 1000 / 60 / 60;//60分钟等于1小时        System.out.println(diffHour);//30小时        //6、换算成天        int diffDay = result / 86400000;        System.out.println(diffDay);//1天    }    }
(0)

相关推荐