java 時間處理工具類


    在開發的過程中,經常會碰到各種時間的處理。下面的代碼是我對時間處理的總結,如果能對這些方法熟練應用,加以變形。可以解決大多數時間問題。

package DataUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;

public class DataUtil {
    /**
     * 預設不同的時間格式
     */
    //精確到年月日(英文) eg:2019-12-31
    public static String FORMAT_LONOGRAM = "yyyy-MM-dd";
    //精確到時分秒的完整時間(英文) eg:2010-11-11 12:12:12
    public static String FORMAT_FULL = "yyyy-MM-dd HH:mm:ss";
    //精確到毫秒完整時間(英文) eg:2019-11-11 12:12:12.55
    public static String FORMAT_LONOGRAM_MILL = "yyyy-MM-dd HH:mm:ss.SSS";
    //精確到年月日(中文)eg:2019年11月11日
    public static String FORMAT_LONOGRAM_CN = "yyyy年MM月dd日";
    //精確到時分秒的完整時間(中文)eg:2019年11月11日 12時12分12秒
    public static String FORMAT_FULL_CN = "yyyy年MM月dd日 HH時MM分SS秒";
    //精確到毫秒完整時間(中文)
    public static String FORMAT_LONOGRAM_MILL_CN = "yyyy年MM月dd日HH時MM分SS秒SSS毫秒";
    /**
     * 預設默認的時間格式
     */
    public static String getDefaultFormat() {
        return FORMAT_FULL;
    }
    /**
     * 預設格式格式化日期
     */
    public static String format(Date date) {
        return format(date,getDefaultFormat());
    }
    /**
     * 自定義格式格式化日期
     */
    private static String format(Date date, String format) {
        String value = "";
        if(date != null) {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            value = sdf.format(date);
        }
        return value;
    }
    /**
     * 根據預設默認格式,返回當前日期
     */
    public static String getNow() {
        return format(new Date());
    }
    /**
     * 自定義時間格式,返回當前日期
     */
    public static String getNow(String format) {
        return format(new Date(),format);
    }
    /**
     *根據預設默認時間 String->Date
     */
    public static Date parse(String strDate) {
        return parse(strDate,getDefaultFormat());
    }
    /**
     * 自定義時間格式:Stirng->Date
     */
    public static Date parse(String strDate,String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        try {
            return sdf.parse(strDate);
        }catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
      * 基於指定日期增加年
     * @param num  正數往后推,負數往前移
     * Calendar:它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 
      *                 等日歷字段之間的轉換提供了一些方法,並為操作日歷字段(例如獲得下星期的日期)提供了一些方法。
     */
    public static Date addYear(Date date,int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.YEAR, num);
        return cal.getTime();
    }
    /**
     * 基於指定日期增加整月
     * @param date
     * @param num 整數往后推,負數往前移
     * @return
     */
    public static Date addMonth(Date date,int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, num);
        return cal.getTime();
    }
    /**
     * 基於指定日期增加天數
     * @param date
     * @param num 整數往后推,負數往前移
     * @return
     */
    public static Date addDay(Date date,int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, num);
        return cal.getTime();
    }
    /**
     * 基於指定日期增加分鍾
     * @param date
     * @param num 整數往后推,負數往前移
     * @return
     */
    public static Date addMinute(Date date,int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MINUTE, num);
        return cal.getTime();
    }
    /**
     * 獲取時間戳 eg:yyyy-MM-dd HH:mm:ss.S
     * @return
     */
    public static String getTimeStamp() {
        SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_LONOGRAM_MILL);
        Calendar cal = Calendar.getInstance();
        return sdf.format(cal.getTime());
    }
    /**
     * 獲取日期的年份
     * @param date
     * @return
     */
    public static String getYear(Date date) {
        return format(date).substring(0,4);
    }
    /**
     * 獲取年份+月
     */
    public static String getYearMonth(Date date) {
        return format(date).substring(0, 7);
    }
    /**
     *獲取日期的小時數
     */
    public static int getHour(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.HOUR_OF_DAY);
    }
    /**
      *   自定義時間格式字符串距離今天的天數
     * @param strDate
     * @param format
     * @return
     */
    public static int countDays(String strDate,String format) {
        long time = Calendar.getInstance().getTime().getTime();
        Calendar cal = Calendar.getInstance();
        cal.setTime(parse(strDate,format));
        long diff = cal.getTime().getTime();
        long a = time/1000;
        long b = diff/1000;
        return (int) (a - b)/3600/24;
    }
    /**
     * 預設格式的字符串距離今天的天數
     * @param strDate
     * @return
     */
    public static int countDays(String strDate) {
        return countDays(strDate,getDefaultFormat());
    }
    /**
     * 獲取天數差值(依賴時間)
     * @param date1
     * @param date2
     * @return
     */
    public static int diffDays(Date date1,Date date2) {
        if(date1 == null || date2 == null) {
            return 0;
        }
        return (int) (Math.abs(date1.getTime() - date2.getTime()) / (60 * 60 * 24 * 1000));
    }
    /**
     * 獲取年份差值
     * @param year1
     * @param year2
     * @return
     */
    public static int diffYear(Date year1,Date year2) {
        return diffDays(year1,year2) / 365;
    }
    /**
     * 獲取天數差值(依賴Date類型的日期)
     * @param d1
     * @param d2
     * @return
     */
    public static int diffByDays(Date d1,Date d2) {
        Date s1 = parse(format(d1,FORMAT_LONOGRAM),FORMAT_LONOGRAM);
        Date s2 = parse(format(d2,FORMAT_LONOGRAM),FORMAT_LONOGRAM);
        return diffDays(s1,s2);
    }
    /**
     * 獲取時間分割集合
     *
     * @param date 查詢日期
     * @param strs 帶拆分的時間點
     * @return
     */
    public static List<Date> collectTimes(Date date, String[] strs){
        List<Date> result = new ArrayList<Date>();
        List<String> times = Arrays.asList(strs);
        String dateStr = format(date,FORMAT_LONOGRAM);
        String pattern = FORMAT_LONOGRAM + "K";
        if(times.size() > 0 ) {
            times.stream().forEach(t -> {
                result.add(parse(date +" "+ t,pattern));
            });
        }
        return result;
    }
    
     /**
     * 根據日期查詢當前為周幾
     * @param dt
     * @return
     */
    public static String getWeekOfDate(Date dt) {
        String[] weekDays = {"7","1","2","3","4","5","6"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        int w = cal.get(Calendar.DAY_OF_WEEK);   //1--7的值,對應:星期日,星期一,星期二,星期三....星期六
        //System.out.println(w);
        return weekDays[w-1];
        
    }
    
    /**
     * 將時間轉換成漢字
     * @param hour
     * @return
     */
    public static String hourToCn(String hour) {
        String[] timeArray = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
        String[] hourArray = hour.split(":");
        int hourInt = Integer.parseInt(hourArray[0]);
        int minute = Integer.parseInt(hourArray[1]);
        String result = intToCn(hourInt,timeArray) + "點\n" + intToCn(minute,timeArray) + "分";
        return result;
    }
    private static String intToCn(int hourInt, String[] timeArray) {
        String result = "";
        if(hourInt >= 0 && hourInt <= 10) {
            result += timeArray[hourInt] + "\n";
        } else if (hourInt >= 11 && hourInt <= 19) {
            result += (timeArray[10] + "\n" + timeArray[hourInt % 10]) + "\n";
        }else {
            result += (timeArray[hourInt / 10] + "\n" + timeArray[10]) + "\n" + (hourInt % 10 == 0 ? "" : timeArray[hourInt % 10] + "\n");
        }
        return result;
    }
    /**
     * 獲取當前日期后的一周時間,並返回LinkedHashMap<String, Date>
     * @param startTime
     * @return
     */
    public static LinkedHashMap<String, Date> dateAfterWeek(String startTime) {
        LinkedHashMap<String, Date> result = new LinkedHashMap<>();
        try {
            Date date = parse(startTime,FORMAT_LONOGRAM);
            for (int i = 0; i < 7; i++) {
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(date);
                calendar.add(calendar.DATE, i);  //把日期往后增加一天,整數往后推,負數往前移動  時間戳轉時間
                Date newDate = calendar.getTime();
                String str = new SimpleDateFormat("yyyy-MM-dd").format(newDate);
                result.put(str, newDate);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return result;
    }
    /**
     * 獲取當前日期 后的一周時間,並返回yyyy-MM-dd字符串數組
     * @param startTime
     * @return
     */
    public static String[] dateAfterWeekArray(String startTime) {
        String weekArray[] = new String[7];
        try {
            Date date = parse(startTime,FORMAT_LONOGRAM);
            for (int i = 0; i < 7; i++) {
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(date);
                calendar.add(calendar.DATE, i);//把日期往后增加一天,整數往后推,負數往前移動  時間戳轉時間
                Date newDate = calendar.getTime();
                weekArray[i] = new SimpleDateFormat("yyyy-MM-dd").format(newDate);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return weekArray;
    }
    /**
     * 根據傳入的時間獲取本周開始(0-表示本周,1-表示下周,-1-表示上周  )
     * @param date
     * @return
     */
    public static String getMonDayToDate(String date) {  
        Calendar cal = Calendar.getInstance();  
        cal.setTime(parse(date, "yyyy-MM-dd"));  
        // N:0-表示本周,1-表示下周,-1-表示上周  
        cal.add(Calendar.DATE, 0 * 7);  
        // Calendar.MONDAY 表示獲取周一的日期; Calendar.WEDNESDAY:表示周三的日期  
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);  
        return format(cal.getTime());
    }

    public static void main(String[] args) {
        //String time = format(new Date());
        //String weekOfDate = getWeekOfDate(new Date());
        //int countDays = countDays("2019-12-22",FORMAT_LONOGRAM);
        //Calendar cal = Calendar.getInstance();
//        long time = cal.getTime().getTime();
//        System.out.println("星期:"+weekOfDate);
//        String hourToCn = hourToCn(format(new Date()).substring(11, 19));
//        System.out.print(hourToCn);
//        String[] dateAfterWeekArray = dateAfterWeekArray(format(new Date()));
//        for (int i = 0; i < dateAfterWeekArray.length; i++) {
//            System.out.println(dateAfterWeekArray[i]);
//        }
        String monDayToDate = getMonDayToDate(format(new Date()));
        System.out.println(monDayToDate);
        
    }
    
    
}

 

 感謝閱讀,希望能對您有所幫助!

參考博文:https://blog.csdn.net/qq_41144667/article/details/103745529


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM