From ab2f1039329448a9eec10dd33dbf70a3fe9ef7d6 Mon Sep 17 00:00:00 2001
From: chenjiahe <763432473@qq.com>
Date: 星期一, 18 九月 2023 15:13:05 +0800
Subject: [PATCH] 新版excel优化

---
 src/main/java/com/hx/util/DateUtil.java |  499 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 494 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/hx/util/DateUtil.java b/src/main/java/com/hx/util/DateUtil.java
index 724ae27..2943ccd 100644
--- a/src/main/java/com/hx/util/DateUtil.java
+++ b/src/main/java/com/hx/util/DateUtil.java
@@ -26,6 +26,18 @@
     private static SimpleDateFormat Format_16 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
     private static SimpleDateFormat Format_17 = new SimpleDateFormat("HH:mm");
 
+    /**鏃堕棿鏍煎紡杞寲iso8601
+     * @param date 鏃堕棿
+     * @return 杩斿洖鐨勬椂闂存牸寮忓瓧绗︿覆
+     */
+    public static String dateFormatISO8601(Date date) {
+        if(!SimpleTool.checkNotNull(date)){
+            return "";
+        }
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");//璁剧疆鏃ユ湡鏍煎紡
+        return df.format(date);
+    }
+
     /**鏃堕棿鏍煎紡杞寲
      * @param date 鏃堕棿
      * @param format 鏃堕棿鏍煎紡
@@ -37,6 +49,17 @@
         }
         SimpleDateFormat df = new SimpleDateFormat(format);//璁剧疆鏃ユ湡鏍煎紡
         return df.format(date);
+    }
+
+    /**鏃堕棿鎴宠浆鏃堕棿
+     * @param timestamp 鏃堕棿鎴�
+     * @param format 鏃堕棿鏍煎紡
+     * @return 杩斿洖鐨勬椂闂存牸寮忓瓧绗︿覆
+     */
+    public static Date timestampToDate(long timestamp, String format) {
+        SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String sd = sdf.format(new Date(timestamp));      // 鏃堕棿鎴宠浆鎹㈡垚鏃堕棿
+        return DateUtil.parseString(sd,"yyyy-MM-dd HH:mm:ss");
     }
 
     /**
@@ -179,6 +202,20 @@
         return Format_14.format(date);
     }
 
+
+    /**
+     * 褰撳墠鏃堕棿涔嬪墠鐨勬椂闂翠笌褰撳墠鏃堕棿鐩稿樊澶氬皯绉�
+     * @param startDate 褰撳墠鏃堕棿涔嬪墠鐨勬椂闂�
+     * @return
+     */
+    public static int calLastedTime(Date startDate) {
+        long nowDate = new Date().getTime();
+        long startDateTime = startDate.getTime();
+        int diffSeconds = (int) ((nowDate - startDateTime) / 1000);
+        return diffSeconds;
+    }
+
+
     /**
      * 杞崲鎴恲yyyMMddHHmmssSSS鏍煎紡鐨勬棩鏈熷瓧绗︿覆
      *
@@ -216,8 +253,13 @@
      * @return
      * @throws Exception
      */
-    public static Date parseString(String str) throws Exception {
-        return Format_2.parse(str);
+    public static Date parseString(String str) {
+        try {
+            return Format_2.parse(str);
+        }catch (Exception e)
+        {
+            return null;
+        }
     }
 
     /**
@@ -228,9 +270,49 @@
      * @return
      * @throws Exception
      */
-    public static Date parseString(String str, String format) throws Exception {
+    public static Date parseString(String str, String format) {
         SimpleDateFormat sdf = new SimpleDateFormat(format);
-        return sdf.parse(str);
+        try{
+            return sdf.parse(str);
+        }catch (Exception e)
+        {
+            return null;
+        }
+    }
+
+    /**瀛楃涓茶浆鎴愭椂闂磞yyy-MM-dd HH:mm:ss*/
+    public static Date parseString_1(String str)
+    {
+        try{
+            return  Format_3.parse(str);
+        }catch (Exception e)
+        {
+            return null;
+        }
+    }
+
+    /**瀛楃涓茶浆鎴愭椂闂磞yyy-MM-dd*/
+    public static Date parseString_2(String str)
+    {
+        try{
+            return Format_4.parse(str);
+        }catch (Exception e)
+        {
+            return null;
+        }
+    }
+
+    /**鏃堕棿涓婄鍙犲姞
+     * @Author: ChenJiaHe
+     * @param dateTime 鏃堕棿
+     * @param second 绉�
+     * @return
+     */
+    public static Date addSecond(Date dateTime,int second){
+        Calendar c = Calendar.getInstance();
+        c.setTime(dateTime);
+        c.add(Calendar.SECOND, second);
+        return c.getTime();
     }
 
     /**鏃堕棿涓婂垎閽熷彔鍔�
@@ -269,6 +351,19 @@
         Calendar c = Calendar.getInstance();
         c.setTime(dateTime);
         c.add(Calendar.DATE, dayNum);
+        return c.getTime();
+    }
+
+    /**鏃堕棿涓婃湀鏁板彔鍔�
+     * @Author: ChenJiaHe
+     * @param dateTime 鏃堕棿
+     * @param dayNum 澶╂暟
+     * @return
+     */
+    public static Date addMonth(Date dateTime,int dayNum){
+        Calendar c = Calendar.getInstance();
+        c.setTime(dateTime);
+        c.add(Calendar.MONTH, dayNum);
         return c.getTime();
     }
 
@@ -344,6 +439,54 @@
         return weekDays[w];
     }
 
+    /**
+     * 鑾峰彇涓や釜鏃堕棿鐩稿樊鍒嗛挓鏁�
+     * @param startTime 寮�濮嬫椂闂�
+     * @param endTime 缁撴潫鏃堕棿
+     * @return 鍒嗛挓
+     */
+    public static long differMinute(Date startTime, Date endTime) {
+        long NTime = startTime.getTime();
+        long OTime = endTime.getTime();
+        return (NTime - OTime) / 1000 / 60;
+    }
+
+    /**
+     * endTime姣攕tartTime澶氱殑澶╂暟
+     * @param startTime 鏈�灏忔椂闂�
+     * @param endTime 鏈�澶ф椂闂�
+     * @return 杩斿洖
+     */
+    public static Integer differDay(Date startTime,Date endTime){
+        Calendar cal1 = Calendar.getInstance();
+        cal1.setTime(startTime);
+
+        Calendar cal2 = Calendar.getInstance();
+        cal2.setTime(endTime);
+        int day1= cal1.get(Calendar.DAY_OF_YEAR);
+        int day2 = cal2.get(Calendar.DAY_OF_YEAR);
+
+        int year1 = cal1.get(Calendar.YEAR);
+        int year2 = cal2.get(Calendar.YEAR);
+        if(year1 != year2) { //鍚屼竴骞�
+            int timeDistance = 0 ;
+            for(int i = year1 ; i < year2 ; i ++) {
+                if(i%4==0 && i%100!=0 || i%400==0) {//闂板勾
+                    timeDistance += 366;
+                }
+                else {//涓嶆槸闂板勾
+                    timeDistance += 365;
+                }
+            }
+
+            return timeDistance + (day2-day1) ;
+        }
+        else { //涓嶅悓骞�
+            System.out.println("鍒ゆ柇day2 - day1 : " + (day2-day1));
+            return day2-day1;
+        }
+    }
+
     /**鍒ゆ柇涓や釜鏃堕棿鏄笉鏄悓涓�澶�*/
     public static boolean timeEqual(Date startTime,Date endTime){
        if(startTime == null || endTime==null){
@@ -351,9 +494,355 @@
        }
        boolean status = false;
        if(formatDate(startTime,"yyyyMMdd").equals(formatDate(endTime,"yyyyMMdd"))){
-           status = false;
+           status = true;
        }
        return status;
     }
 
+    /**鎶婄杞崲鎴怷澶鏃禭鍒哫绉�*/
+    public static String getChineseStr(Integer second) {
+        int day = 24 * 60 * 60;
+        int hour = 60 * 60;
+        int min = 60;
+
+        int dayNum = second / day;
+        int hourNum = second % day / hour;
+        int minNum = second % day % hour / min;
+        second = second % day % hour % min;
+
+        String str = dayNum > 0 ? dayNum + "澶�" : "";
+        str += hourNum > 0 ? hourNum + "鏃�" : "";
+        str += minNum > 0 ? minNum + "鍒�" : "";
+        str += second + "绉�";
+
+        return str;
+    }
+
+    /**
+     * 閽堝str鏍煎紡鐨勬椂闂村仛杞崲 鏍煎紡涓�"xx:xx"
+     * @param time  浼犲叆鐨勬椂闂�
+     * @return  杩斿洖鍒嗛挓濡傛灉10锛�25,鍒欒繑鍥�625
+     */
+    public static int getMinuteNum(String time){
+
+        if(!StringUtils.isEmpty(time))
+        {
+            String[] arr = time.split(":");
+            if(arr != null && arr.length == 2)
+            {
+                return Integer.parseInt(arr[0]) * 60 + Integer.parseInt(arr[1]);
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鏈堢殑寮�濮嬫椂闂�
+     * @param time 鏃堕棿
+     * @return 杩斿洖鏃堕棿 鏍煎紡yyyy-MM-dd 00:00:00
+     */
+    public static Date getMonthStart(Date time) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(time);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        return calendar.getTime();
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鏈堢殑寮�濮嬫椂闂�
+     *
+     * @param num 0鎷垮彇褰撴湀锛屾浠h〃鍚庯紝璐熶唬琛ㄥ墠锛屽�间负鍑犱釜锛堟湀锛�
+     * @return 杩斿洖鏃堕棿 鏍煎紡yyyy-MM-dd 00:00:00
+     */
+    public static String getMonthStart(Integer num) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.MONTH, num);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
+        return sdf.format(calendar.getTime());
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鏈堢殑缁撴潫鏃堕棿
+     * @param date 鐐瑰墠鏃堕棿
+     * @return 杩斿洖鏃堕棿 鏍煎紡yyyy-MM-dd 23:59:59
+     */
+    public static Date getMonthEnd(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        return calendar.getTime();
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鏈堢殑缁撴潫鏃堕棿
+     * @param num 0鎷垮彇褰撴湀锛屾浠h〃鍚庯紝璐熶唬琛ㄥ墠锛屽�间负鍑犱釜锛堟湀锛�
+     * @return 杩斿洖鏃堕棿 鏍煎紡yyyy-MM-dd 23:59:59
+     */
+    public static String getMonthEnd(Integer num) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.MONTH, num);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
+        return sdf.format(calendar.getTime());
+    }
+
+    /**
+     * 鑾峰彇褰撳墠骞寸殑寮�濮嬫椂闂�
+     * @param time 鏃堕棿
+     * @return 杩斿洖鏃堕棿 鏍煎紡yyyy-MM-dd 00:00:00
+     */
+    public static Date getYearStart(Date time) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(time);
+        calendar.set(Calendar.MONTH, 0);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        return calendar.getTime();
+    }
+
+    /**
+     * 鑾峰彇褰撳墠骞寸殑缁撴潫鏃堕棿
+     * @param time 鏃堕棿
+     * @return 杩斿洖鏃堕棿 鏍煎紡yyyy-MM-dd 00:00:00
+     */
+    public static Date getYearEnd(Date time) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(time);
+        calendar.set(Calendar.MONTH, 11);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE));
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        return calendar.getTime();
+    }
+
+
+    /**杩欏ぉ鐨勫紑濮嬫椂闂�
+     * 鏃ユ湡2000-01-01鍙�2000-01-01 00:00:00
+     */
+    public static String dayToStart(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
+        return sdf.format(calendar.getTime());
+    }
+
+    /**杩欏ぉ鐨勬渶鍚庢椂闂�
+     * 鏃ユ湡2000-01-01鍙�2000-01-01 23:59:59
+     */
+    public static String dayToEnd(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
+        return sdf.format(calendar.getTime());
+    }
+
+    /**杩欏ぉ鐨勫紑濮嬫椂闂�
+     * 鏃ユ湡2000-01-01鍙�2000-01-01 00:00:00
+     */
+    public static Date dayToStartDate(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        return calendar.getTime();
+    }
+
+    /**杩欏ぉ鐨勬渶鍚庢椂闂�
+     * 鏃ユ湡2000-01-01鍙�2000-01-01 23:59:59
+     */
+    public static Date dayToEndDate(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        return calendar.getTime();
+    }
+
+    /**鑾峰彇鏈堜唤鐨勫ぉ鏁�
+     * @param date 鏃堕棿
+     * @return 鏈堜唤鐨勫ぉ鏁�
+     */
+    public static int getMonthDays(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        cal.set(Calendar.DATE, 1);
+        cal.roll(Calendar.DATE, -1);
+        return cal.getActualMaximum(Calendar.DATE);
+    }
+    
+    /**鑾峰彇鏈堜唤鐨勫ぉ鏁�
+     * @param year 骞翠唤
+     * @param month 鏈堜唤
+     * @return 鏈堜唤鐨勫ぉ鏁�
+     */
+    public static int getMonthDays(int year, int month) {
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.YEAR, year);
+        cal.set(Calendar.MONTH, (month - 1));
+        cal.set(Calendar.DATE, 1);
+        cal.roll(Calendar.DATE, -1);
+        return cal.getActualMaximum(Calendar.DATE);
+    }
+
+    /**鑾峰彇鏈堜唤鐨勫ぉ鏁�
+     * @param yearMonth 骞存湀
+     * @param format 鏃堕棿鏍煎紡
+     * @return 杩斿洖
+     */
+    public static int getMonthDays(String yearMonth,String format) {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        Calendar calendar = Calendar.getInstance();
+        try {
+            calendar.setTime(sdf.parse(yearMonth));
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+    }
+
+    /**褰撳ぉ澶氬皯鐐瑰墠
+     * @param date 鏃堕棿
+     * @param num 澶氬皯鐐瑰墠锛屼笉鍚綋鐐瑰墠锛�24灏忔椂鍒�
+     * @return 鏈堜唤鐨勫ぉ鏁�
+     */
+    public static boolean getFrontMinute(Date date,int num) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        cal.set(Calendar.HOUR_OF_DAY, num-1);
+        cal.set(Calendar.MINUTE, 59);
+        cal.set(Calendar.SECOND, 59);
+
+        return date.compareTo(cal.getTime()) < 1;
+    }
+
+    /**
+     * 鑾峰緱鏌愪釜鏃ユ湡鐨勫綋澶╂煇鐐�
+     * 渚嬪:2022-12-26 11:20:00 -> 2022-12-26 13:00:00
+     * @param num 24灏忔椂
+     */
+    public static String getHourDayTime(Date date,int num) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, num);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
+        return sdf.format(calendar.getTime());
+    }
+
+    /**
+     * 鑾峰彇鏃堕棿褰撴湀鍓╀綑澶╂暟
+     * */
+    public static Integer getMonthSurplus(Date date) {
+        Calendar month = Calendar.getInstance();
+        month.setTime(new Date());
+        month.set(Calendar.DATE, 1);
+        month.roll(Calendar.DATE, -1);
+        return month.getActualMaximum(Calendar.DATE) - Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
+    }
+
+    /**鑾峰彇褰撳墠鏃堕棿鎵�鍦ㄥ懆鐨勫懆涓�00:00:00*/
+    public static Date getMonday(Date date) {
+        Calendar calendar = Calendar.getInstance(Locale.CHINA);
+        calendar.setTime(date);
+        //浠ュ懆涓�涓洪鏃�
+        calendar.setFirstDayOfWeek(Calendar.MONDAY);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        //鍛ㄤ竴
+        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+        return calendar.getTime();
+    }
+
+    /**
+     * 鏍规嵁鍑虹敓骞存湀鏃ヨ绠楀勾榫�
+     * @param birth
+     * @return
+     */
+    public static int getAge(Date birth) {
+        Calendar cal = Calendar.getInstance();
+        int thisYear = cal.get(Calendar.YEAR);
+        int thisMonth = cal.get(Calendar.MONTH);
+        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
+
+        cal.setTime(birth);
+        int birthYear = cal.get(Calendar.YEAR);
+        int birthMonth = cal.get(Calendar.MONTH);
+        int birthdayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
+
+        int age = thisYear - birthYear;
+
+        // 鏈冻鏈�
+        if (thisMonth <= birthMonth) {
+            // 褰撴湀
+            if (thisMonth == birthMonth) {
+                // 鏈冻鏃�
+                if (dayOfMonth < birthdayOfMonth) {
+                    age--;
+                }
+            } else {
+                age--;
+            }
+        }
+        return age;
+    }
+
+    /**
+     * 鑾峰彇鏌愬ぉ缁撴潫绉掓暟
+     * @param dateTime      鏃ユ湡
+     * @param lateSecond    寤惰繜绉掓暟
+     * @return
+     */
+    public long todayEndSecond(Date dateTime, Long lateSecond) {
+        if(dateTime == null){
+            dateTime = new Date();
+        }
+        if(lateSecond == null){
+            lateSecond = 0L;
+        }
+        Date endTime = DateUtil.dayToEndDate(dateTime);
+        return differSecond(dateTime, endTime) + lateSecond;
+    }
+
+    /**
+     * 璁$畻2涓疄闄呯浉宸鏁�
+     * @param startTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     * @return
+     */
+    public long differSecond(Date startTime, Date endTime) {
+        if(startTime == null || endTime == null){
+            return 0L;
+        }
+        long sTime = startTime.getTime();
+        long eTime = endTime.getTime();
+        return (eTime - sTime) / 1000L;
+    }
 }

--
Gitblit v1.8.0