Java8中對時間的處理

Java8中對時間的處理主要是LocalDate、LocalTime、LocalDateTime這幾個類實現,直接看下面的測試代碼,註釋很詳細。 @[TOC]java

java8時間處理測試

/**
 * java8時間處理測試
 * LocalDate、LocalTime、LocalDateTime
 * 說明:
 * <p>
 * 建立人: LGQ <br>
 * 建立時間: 2018年8月21日 下午1:52:28 <br>
 * <p>
 * 修改人: <br>
 * 修改時間: <br>
 * 修改備註: <br>
 * </p>
 */
public static void java8DateTest() {
	/**
	 * LocalDate
	 */
	System.out.println(">>>>>>>>>LocalDate<<<<<<<<");
	
	//獲取當前日期,2018-08-21
	LocalDate localDate = LocalDate.now();
	System.err.println("當前日期>" + localDate);
	
	//獲取當前年 2018
	System.err.println(localDate + "當前年>" + localDate.getYear());
	
	//獲取當前月 8
	System.err.println(localDate + "當前月>" + localDate.getMonthValue());
	
	//獲取當前年中的日 233
	System.err.println(localDate + "當前年中的日>" + localDate.getDayOfYear());
	
	//獲取當前月中的日 21
	System.err.println(localDate + "當前月中的日>" + localDate.getDayOfMonth());
	
	//獲取當前星期中的日 2
	System.err.println(localDate + "當前星期中的日>" + localDate.getDayOfWeek().getValue());
	
	//當前日期前一天,2018-08-20 minus:(表示運算)減去
	System.err.println(localDate + "前一天>" + localDate.minusDays(1));
	
	//當前日期後一天,2018-08-20 plus:(表示運算)加
	System.err.println(localDate + "後一天>" + localDate.plusDays(1));
	
	//當前日期前一月,2018-07-21 minus:(表示運算)減去
	System.err.println(localDate + "前一月>" + localDate.minusMonths(1));
	
	//當前日期後一月,2018-09-21 plus:(表示運算)加
	System.err.println(localDate + "後一月>" + localDate.plusMonths(1));
	
	//當前日期前一年,2017-08-21 minus:(表示運算)減去
	System.err.println(localDate + "前一年>" + localDate.minusYears(1));
	
	//當前日期後一年,2019-08-21 plus:(表示運算)加
	System.err.println(localDate + "後一年>" + localDate.plusYears(1));
	
	//當前日期前一週,2018-08-14 minus:(表示運算)減去
	System.err.println(localDate + "前一週>" + localDate.minusWeeks(1));
	
	//當前日期後一週,2018-08-28 plus:(表示運算)加
	System.err.println(localDate + "後一週>" + localDate.plusWeeks(1));
	
	
	/**
	 * LocalTime
	 */
	System.out.println(">>>>>>>>>LocalTime<<<<<<<<");
	//獲取當前時間 11:36:13.693
	LocalTime localTime = LocalTime.now();
	System.err.println("當前時間>" + localTime);
	
	//獲取當前時 11
	System.err.println(localTime + "當前時>" + localTime.getHour());
	
	//獲取當前分 38
	System.err.println(localTime + "當前分>" + localTime.getMinute());
	
	//獲取當前秒 26
	System.err.println(localTime + "當前秒>" + localTime.getSecond());
	
	//當前時間前一時,11:36:12.693 minus:(表示運算)減去
	System.err.println(localTime + "前一時>" + localTime.minusHours(1));
	
	//當前時間後一時,11:36:12.693 minus:(表示運算)減去
	System.err.println(localTime + "後一時>" + localTime.plusHours(1));
	
	//當前時間前一分,11:39:05.970 minus:(表示運算)減去
	System.err.println(localTime + "前一分>" + localTime.minusMinutes(1));
	
	//當前時間後一分,11:36:12.693 minus:(表示運算)減去
	System.err.println(localTime + "後一分>" + localTime.plusMinutes(1));
	
	//當前時間前一秒,11:36:12.693 minus:(表示運算)減去
	System.err.println(localTime + "前一秒>" + localTime.minusSeconds(1));
	
	//當前時間後一秒,11:36:12.693 minus:(表示運算)減去
	System.err.println(localTime + "後一秒>" + localTime.plusSeconds(1));
	
	/**
	 * localDateTime
	 * LocalDateTime類是Java 8中日期時間功能裏,用於表示當地的日期與時間的類,它的值是無時區屬性的。
	 * 你能夠將其視爲Java 8中LocalDate與LocalTime兩個類的結合。
	 * 你能夠經過這些方法訪問其日期時間
	 * 	getYear()
		getMonth()
		getDayOfMonth()
		getDayOfWeek()
		getDayOfYear()
		getHour()
		getMinute()
		getSecond()
		getNano()
	 */
	System.out.println(">>>>>>>>>localDateTime<<<<<<<<");
	
	LocalDateTime localDateTime = LocalDateTime.now();
	System.err.println("當前完整日期>" + localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
	
	
	/**
	 * 時間格式化
	 */
	System.out.println(">>>>>>>>>時間格式化<<<<<<<<");
	
	DateTimeFormatter formatDataTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
	DateTimeFormatter formatDate = DateTimeFormatter.ofPattern("yyyy-MM-dd");
	DateTimeFormatter formatTime = DateTimeFormatter.ofPattern("HH:mm:ss");
	
	String formatDataTimeStr = localDateTime.format(formatDataTime);
	String formatDateStr = localDateTime.format(formatDate);
	String formatTimeStr = localDateTime.format(formatTime);
	
	System.err.println("完整日期格式化以後" + formatDataTimeStr);
	System.err.println("日期格式化以後" + formatDateStr);
	System.err.println("時間格式化以後" + formatTimeStr);
	
	/**
	 * 時間比較大小
	 */
	System.out.println(">>>>>時間比較大小<<<<<");
	
	LocalDateTime time1 = LocalDateTime.parse("2018-05-12 08:30:30", formatDataTime);
	LocalDateTime time2 = LocalDateTime.parse("2018-04-20 16:30:30", formatDataTime);
	
	System.err.println("time1=" + time1);
	System.err.println("time2=" + time2);
	
	System.err.println("time1==time2:" + time1.isEqual(time2));
	System.err.println("time1>time2:" + time1.isAfter(time2));
	System.err.println("time1<time2:" + time1.isBefore(time2));
}

運行效果以下:工具

image.png

基於java8封裝的時間處理工具類

package com.blog.www.util;


import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 基於java8封裝的時間處理工具類
 * <p>
 * 建立人:leigq <br>
 * 建立時間:2018-11-07 09:21 <br>
 * <p>
 * 修改人: <br>
 * 修改時間: <br>
 * 修改備註: <br>
 * </p>
 */
public class DateUtil {

    private static final String HYPHEN = "-";
    private static final String COLON = ":";

    /*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 時間格式 DateTimeFormatter (Java8) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
    enum FormatEnum {
        /**
         * 返回 DateTimeFormatter "yyyy-MM-dd HH:mm:ss" 時間格式
         */
        FORMAT_DATA_TIME(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT)),

        /**
         * 返回 DateTimeFormatter "yyyyMMddHHmmss"的時間格式
         */
        FORMAT_DATA_TIME_NO_SYMBOL(DateTimeFormatter.ofPattern(DATETIME_FORMAT)),

        /**
         * 返回 DateTimeFormatter "yyyy-MM-dd"的時間格式
         */
        FORMAT_DATE(DateTimeFormatter.ofPattern(DATE_FORMAT)),

        /**
         * 返回 DateTimeFormatter "HH:mm:ss"的時間格式
         */
        FORMAT_TIME(DateTimeFormatter.ofPattern(TIME_FORMAT));

        private DateTimeFormatter value;

        FormatEnum(DateTimeFormatter format) {
            this.value = format;
        }
    }
    /*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 時間格式 DateTimeFormatter (Java8) ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/

    /*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 時間格式 字符串 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/

    /**
     * 年的時間格式
     * <br/>
     * 返回 "yyyy" 字符串
     */
    public static final String YEAR_FORMAT = "yyyy";

    /**
     * 月的時間格式
     * <br/>
     * 返回 "MM" 字符串
     */
    public static final String MONTH_FORMAT = "MM";

    /**
     * 日的時間格式
     * <br/>
     * 返回 "dd" 字符串
     */
    public static final String DAY_FORMAT = "dd";

    /**
     * 時的時間格式
     * <br/>
     * 返回 "HH" 字符串
     */
    public static final String HOUR_FORMAT = "HH";

    /**
     * 分的時間格式
     * <br/>
     * 返回 "mm" 字符串
     */
    public static final String MINUTE_FORMAT = "mm";

    /**
     * 秒的時間格式
     * <br/>
     * 返回 "ss" 字符串
     */
    public static final String SECOND_FORMAT = "ss";

    /**
     * <span color='red'>年-月-日</span>的時間格式
     * <br/>
     * 返回 "yyyy-MM-dd" 字符串
     */
    public static final String DATE_FORMAT = YEAR_FORMAT + HYPHEN + MONTH_FORMAT + HYPHEN + DAY_FORMAT;

    /**
     * <span color='red'>時:分:秒</span>的時間格式
     * <br/>
     * 返回 "HH:mm:ss" 字符串
     */
    public static final String TIME_FORMAT = HOUR_FORMAT + COLON + MINUTE_FORMAT + COLON + SECOND_FORMAT;

    /**
     * <span color='red'>年-月-日 時:分:秒</span>的時間格式
     * <br/>
     * 返回 "yyyy-MM-dd HH:mm:ss" 字符串
     */
    public static final String DATE_TIME_FORMAT = DATE_FORMAT + " " + TIME_FORMAT;

    /**
     * <span color='red'>年月日時分秒</span>的時間格式(無符號)
     * <br/>
     * 返回 "yyyyMMddHHmmss" 字符串
     */
    public static final String DATETIME_FORMAT = YEAR_FORMAT + MONTH_FORMAT + DAY_FORMAT + HOUR_FORMAT + MINUTE_FORMAT + SECOND_FORMAT;

    /*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 時間格式 字符串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/



    /*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 時間戳 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/

    /**
     * 獲取秒級時間戳
     */
    public static Long epochSecond() {
        return localDateTime().toEpochSecond(ZoneOffset.of("+8"));
    }

    /**
     * 獲取毫秒級時間戳
     */
    public static Long epochMilli() {
        return localDateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
    }

    /*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 時間戳 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/


    /*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 當前時間相關 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/

    /**
     * 獲取當前詳細時間,like 2018-08-27 17:20:06
     */
    public static String dateTime() {
        return localDateTime().format(FormatEnum.FORMAT_DATA_TIME.value);
    }

    /**
     * 獲取當前詳細時間,like 20180827172006
     */
    public static String dateTimeNoSymbol() {
        return localDateTime().format(FormatEnum.FORMAT_DATA_TIME_NO_SYMBOL.value);
    }

    /**
     * 獲取當前日期,like 2018-08-27
     */
    public static String date() {
        return localDate() + "";
    }

    /**
     * 獲取當前時間,like 17:20:06
     */
    public static String time() {
        return localTime().format(FormatEnum.FORMAT_TIME.value);
    }

    /**
     * 獲取當前年
     */
    public static Integer year() {
        return localDate().getYear();
    }

    /**
     * 獲取當前月
     */
    public static int month() {
        return localDate().getMonthValue();
    }

    /**
     * 獲取當前年中的日
     */
    public static Integer dayOfYear() {
        return localDate().getDayOfYear();
    }

    /**
     * 獲取當前月中的日
     */
    public static Integer dayOfMonth() {
        return localDate().getDayOfMonth();
    }

    /**
     * 獲取當前星期中的日
     */
    public static Integer dayOfWeek() {
        return localDate().getDayOfWeek().getValue();
    }

    /**
     * 獲取當前小時
     */
    public static Integer hour() {
        return localTime().getHour();
    }

    /**
     * 獲取當前分鐘
     */
    public static Integer minute() {
        return localTime().getMinute();
    }

    /**
     * 獲取當前秒
     */
    public static Integer second() {
        return localTime().getSecond();
    }

    /*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 當前時間相關 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/



    /*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 將來、歷史時間相關 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/

    /**
     * 獲取當前年的 前幾年 的日期
     * <p>
     *
     * @param years  前幾年 正整數
     * @param format 格式
     * @return 當前年的 前幾年 的 對應 格式 日期
     */
    public static String minusYears(Long years, FormatEnum formatEnum) {
        return minusOrPlusYears(-years, formatEnum);
    }

    /**
     * 獲取當前年的 後幾年 的日期
     * <p>
     *
     * @param years  後幾年 正整數
     * @param format 格式
     * @return 當前年的 後幾年 的 對應 格式 日期
     */
    public static String plusYears(Long years, FormatEnum formatEnum) {
        return minusOrPlusYears(years, formatEnum);
    }

    /**
     * 獲取當前月的 前幾月 日期
     *
     * @param months     前幾月 正整數
     * @param formatEnum 格式
     * @return 當前月的 前幾月 的 對應 格式 日期
     */
    public static String minusMonths(Long months, FormatEnum formatEnum) {
        return minusOrPlusMonths(-months, formatEnum);
    }

    /**
     * 獲取當前月的 後幾月 的日期
     *
     * @param months     後幾月 正整數
     * @param formatEnum 格式
     * @return 當前月的 後幾月 的 對應 格式 日期
     */
    public static String plusMonths(Long months, FormatEnum formatEnum) {
        return minusOrPlusMonths(months, formatEnum);
    }

    /**
     * 獲取當前日的 前幾日 的日期
     *
     * @param days       前幾日 正整數
     * @param formatEnum 格式
     * @return 當前日的 前幾日 的 對應 格式 日期
     */
    public static String minusDays(Long days, FormatEnum formatEnum) {
        return minusOrPlusDays(-days, formatEnum);
    }

    /**
     * 獲取當前日的 後幾日 的日期
     *
     * @param days       後幾日 正整數
     * @param formatEnum 格式
     * @return 當前日的 後幾日 的 對應 格式 日期
     */
    public static String plusDays(Long days, FormatEnum formatEnum) {
        return minusOrPlusDays(days, formatEnum);
    }

    /**
     * 獲取當前星期的 前幾星期 的日期
     *
     * @param weeks      前幾星期 正整數
     * @param formatEnum 格式
     * @return 當前星期的 前幾星期 的 對應 格式 日期
     */
    public static String minusWeeks(Long weeks, FormatEnum formatEnum) {
        return minusOrPlusWeeks(-weeks, formatEnum);
    }

    /**
     * 獲取當前星期的 後幾星期 的日期
     *
     * @param weeks      後幾星期 正整數
     * @param formatEnum 格式
     * @return 當前星期的 後幾星期 的 對應 格式 日期
     */
    public static String plusWeeks(Long weeks, FormatEnum formatEnum) {
        return minusOrPlusWeeks(weeks, formatEnum);
    }

    /**
     * 獲取當前小時的 前幾小時 的日期
     *
     * @param hours      前幾小時 正整數
     * @param formatEnum 格式
     * @return 當前小時的 前幾小時 的 對應 格式 日期
     */
    public static String minusHours(Long hours, FormatEnum formatEnum) {
        return minusOrPlusHours(-hours, formatEnum);
    }

    /**
     * 獲取當前小時的 後幾小時 的日期
     *
     * @param hours      後幾小時 正整數
     * @param formatEnum 格式
     * @return 當前小時的 後幾小時 的 對應 格式 日期
     */
    public static String plusHours(Long hours, FormatEnum formatEnum) {
        return minusOrPlusHours(hours, formatEnum);
    }

    /**
     * 獲取當前分鐘的 前幾分鐘 的日期
     *
     * @param minutes    前幾分鐘 正整數
     * @param formatEnum 格式
     * @return 當前分鐘的 前幾分鐘 的 對應 格式 日期
     */
    public static String minusMinutes(Long minutes, FormatEnum formatEnum) {
        return minusOrPlusMinutes(-minutes, formatEnum);
    }

    /**
     * 獲取當前分鐘的 後幾分鐘 的日期
     *
     * @param minutes    後幾分鐘 正整數
     * @param formatEnum 格式
     * @return 當前分鐘的 後幾分鐘 的 對應 格式 日期
     */
    public static String plusMinutes(Long minutes, FormatEnum formatEnum) {
        return minusOrPlusMinutes(minutes, formatEnum);
    }

    /**
     * 獲取當前秒的 前幾秒 的日期
     *
     * @param seconds    前幾秒 正整數
     * @param formatEnum 格式
     * @return 當前秒的 前幾秒 的 對應 格式 日期
     */
    public static String minusSeconds(Long seconds, FormatEnum formatEnum) {
        return minusOrPlusSeconds(-seconds, formatEnum);
    }

    /**
     * 獲取當前秒的 前幾秒/後幾秒 的日期
     *
     * @param seconds    後幾秒 正整數
     * @param formatEnum 格式
     * @return 當前秒的 後幾秒 的 對應 格式 日期
     */
    public static String plusSeconds(Long seconds, FormatEnum formatEnum) {
        return minusOrPlusSeconds(seconds, formatEnum);
    }

    /*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 將來、歷史時間相關 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/


    /*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 時間轉換相關 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/

    /**
     * Date類型轉LocalDateTime
     * <p>
     *
     * @param date date類型時間
     * @return LocalDateTime
     */
    public static LocalDateTime toLocalDateTime(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

    /**
     * Date類型轉LocalDate
     * <p>
     *
     * @param date date類型時間
     * @return LocalDate
     */
    public static LocalDate toLocalDate(Date date) {
        return toLocalDateTime(date).toLocalDate();
    }

    /**
     * Date類型轉LocalTime
     * <p>
     *
     * @param date date類型時間
     * @return LocalTime
     */
    public static LocalTime toLocalTime(Date date) {
        return toLocalDateTime(date).toLocalTime();
    }

    /**
     * LocalDateTime 類型轉 Date
     *
     * @param localDateTime localDateTime
     * @return 轉換後的Date類型日期
     */
    public static Date toDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * LocalDate類型轉Date
     *
     * @param localDate localDate
     * @return 轉換後的Date類型日期
     */
    public static Date toDate(LocalDate localDate) {
        return toDate(localDate.atStartOfDay());
    }

    /**
     * LocalTime類型轉Date
     *
     * @param localTime localTime
     * @return 轉換後的Date類型日期
     */
    public static Date toDate(LocalTime localTime) {
        return toDate(LocalDateTime.of(localDate(), localTime));
    }

    /*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 時間轉換相關 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/


    /*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 時間間隔相關 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/

    /**
     * 獲取 endDate-startDate 時間間隔天數
     * <br>建立人: leigq
     * <br>建立時間: 2018-11-07 09:55
     * <br>
     *
     * @param startDate 開始時間
     * @param endDate   結束時間
     * @return 時間間隔天數
     */
    public static Long daysInterval(LocalDate startDate, LocalDate endDate) {
        return endDate.toEpochDay() - startDate.toEpochDay();
    }

    /**
     * 獲取 endDate-startDate 時間間隔天數
     * <br>建立人: leigq
     * <br>建立時間: 2018-11-07 09:55
     * <br>
     *
     * @param startDate 開始時間
     * @param endDate   結束時間
     * @return 時間間隔天數
     */
    public static Long daysInterval(String startDate, String endDate) {
        return daysInterval(LocalDateTime.parse(endDate, FormatEnum.FORMAT_DATA_TIME.value).toLocalDate(),
                LocalDateTime.parse(startDate, FormatEnum.FORMAT_DATA_TIME.value).toLocalDate());
    }

    /**
     * 獲取 endDate-startDate 時間間隔天數
     * <br>建立人: leigq
     * <br>建立時間: 2018-11-07 09:55
     * <br>
     *
     * @param startDate 開始時間
     * @param endDate   結束時間
     * @return 時間間隔天數
     */
    public static Long daysInterval(LocalDateTime startDate, LocalDateTime endDate) {
        return daysInterval(startDate.toLocalDate(), endDate.toLocalDate());
    }

    /*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 時間間隔相關 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/

    /*↓↓↓只容許此類調用↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/

    /**
     * 獲取 當前年 的前幾年/後幾年的日期
     * <p>
     *
     * @param yearsToAddOrSubtract 後幾年傳正整數,前幾年傳負數
     * @param formatEnum           格式
     * @return 當前年的前幾年/後幾年的對應 格式 日期
     */
    private static String minusOrPlusYears(Long yearsToAddOrSubtract, FormatEnum formatEnum) {
        return localDateTime().plusYears(yearsToAddOrSubtract).format(formatEnum.value);
    }

    /**
     * 獲取 當前月 的前幾月/後幾月的日期
     *
     * @param monthsToAddOrSubtract 後幾月傳正整數,前幾月傳負數
     * @param formatEnum            格式
     * @return 當前月的前幾月/後幾月的對應 格式 日期
     */
    private static String minusOrPlusMonths(Long monthsToAddOrSubtract, FormatEnum formatEnum) {
        return localDateTime().plusMonths(monthsToAddOrSubtract).format(formatEnum.value);
    }

    /**
     * 獲取 當前日 的前幾日/後幾日的日期
     *
     * @param daysToAddOrSubtract 後幾日傳正整數,前幾日傳負數
     * @param formatEnum          格式
     * @return 當前日的前幾日/後幾日的 對應 格式 日期
     */
    private static String minusOrPlusDays(Long daysToAddOrSubtract, FormatEnum formatEnum) {
        return localDateTime().plusDays(daysToAddOrSubtract).format(formatEnum.value);
    }

    /**
     * 獲取當前星期的前幾星期/後幾星期的日期
     *
     * @param weeksToAddOrSubtract 後幾星期傳正整數,前幾星期傳負數
     * @param formatEnum           格式
     * @return 當前星期的前幾星期/後幾星期的 對應 格式 日期
     */
    private static String minusOrPlusWeeks(Long weeksToAddOrSubtract, FormatEnum formatEnum) {
        return localDateTime().plusWeeks(weeksToAddOrSubtract).format(formatEnum.value);
    }

    /**
     * 獲取當前小時的前幾小時/後幾小時的日期
     *
     * @param hoursToAddOrSubtract 後幾小時傳正整數,前幾小時傳負數
     * @param formatEnum           格式
     * @return 當前小時的前幾小時/後幾小時的 對應 格式 日期
     */
    private static String minusOrPlusHours(Long hoursToAddOrSubtract, FormatEnum formatEnum) {
        return localDateTime().plusHours(hoursToAddOrSubtract).format(formatEnum.value);
    }

    /**
     * 獲取當前分鐘的前幾分鐘/後幾分鐘的日期
     *
     * @param minutesToAddOrSubtract 後幾分鐘傳正整數,前幾分鐘傳負數
     * @param formatEnum             格式
     * @return 當前分鐘的前幾分鐘/後幾分鐘的 對應 格式 日期
     */
    private static String minusOrPlusMinutes(Long minutesToAddOrSubtract, FormatEnum formatEnum) {
        return localDateTime().plusMinutes(minutesToAddOrSubtract).format(formatEnum.value);
    }

    /**
     * 獲取當前秒的前幾秒/後幾秒的日期
     *
     * @param secondsToAddOrSubtract 後幾秒傳正整數,前幾秒傳負數
     * @param formatEnum             格式
     * @return 當前秒的前幾秒/後幾秒的 對應 格式 日期
     */
    private static String minusOrPlusSeconds(Long secondsToAddOrSubtract, FormatEnum formatEnum) {
        return localDateTime().plusSeconds(secondsToAddOrSubtract).format(formatEnum.value);
    }

    /**
     * 獲取 LocalDate
     */
    private static LocalDate localDate() {
        return localDateTime().toLocalDate();
    }

    /**
     * 獲取 LocalTime
     */
    private static LocalTime localTime() {
        return localDateTime().toLocalTime();
    }

    /**
     * 獲取 LocalDateTime
     */
    private static LocalDateTime localDateTime() {
        return LocalDateTime.now();
    }

}

參考

Java8 時間類的使用 Java 8 中 Date與LocalDateTime、LocalDate、LocalTime互轉測試

相關文章
相關標籤/搜索