zoukankan      html  css  js  c++  java
  • 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天
        }
        }
  • 相关阅读:
    python 基础到字符串学习
    Newtonsoft.Json 获取匿名类数据
    Abp Wcf结合使用问题
    Ef Migration 操作出现SQLEXPRESS
    No context type was found in the assembly 'xxx.xxxx'. CodeFirst Ef错误
    Ef Code First 发生”provider: SQL Network Interfaces, error: 26
    ef 多条数据插入处理方案(据说还有更好的)
    记录一次 HttpWebRequest 尝试自动重定向太多 错误
    NetCore 下使用RSA加密,解密;并且前端使用jsencrypt.js实现Rsa相关方法。
    The specified framework version '2.0' could not be parsed 错误处理
  • 原文地址:https://www.cnblogs.com/aitree/p/14301899.html
Copyright © 2011-2022 走看看