jdk8 時間工具包 比較時間 獲取指定時間字符串轉時間

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * JDK 8 時間操作工具包
 *
 * @author hesiyuan
 * @since 1.0.0
 */

public class LocalDateTimeUtil {

    private static DateTimeFormatter dtf14 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

    private static ZoneId zoneId = ZoneId.systemDefault();

    private static DateTimeFormatter dtf8 = DateTimeFormatter.ofPattern("yyyyMMdd");

    /**
     * 使用jdk8獲取當前Date
     *
     * @param dateStr yyyyMMddHHmmss
     * @return date時間
     */
    public static Date getDate14Str(String dateStr) {
        LocalDateTime localDateTime = LocalDateTime.parse(dateStr, dtf14);
        return Date.from(localDateTime.atZone(zoneId).toInstant());
    }

    /**
     * 使用jdk8獲取當前Date
     *
     * @param dateStr yyyyMMddHHmmss
     * @return date時間
     */
    public static Date getDate8Str(String dateStr) {
        LocalDate localDate = LocalDate.parse(dateStr, dtf8);
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 使用jdk8獲取當前時間字符串
     *
     * @param date 時間
     * @return dateStr yyyyMMddHHmmss
     */
    public static String getDate14Str(Date date) {
        LocalDateTime localDateTime = date.toInstant().atZone(zoneId).toLocalDateTime();
        return localDateTime.format(dtf14);
    }

    public static String getDate8Str(Date date) {
        LocalDateTime localDateTime = date.toInstant().atZone(zoneId).toLocalDateTime();
        return localDateTime.format(dtf8);
    }

    /**
     * 判斷指定DateStr日期是否在當前時間x天之後
     *
     * 示例:
     * Date:當前時間15日0點0分1秒 int:days:14
     * true:Date在1日0點0分0秒前 false:Date在1日0分0秒後至當前時間
     *
     * @param dateStr yyyyMMdd日期
     * @param days    天
     * @return true:是 false:否
     */
    public static boolean isDateAfterSpecifiedFewDaysAgo(String dateStr, int days) {
        // 傳入文件所在時間
        LocalDate localDate = LocalDate.parse(dateStr, dtf8);
        return LocalDate.now().minusDays(days - 1).isBefore(localDate);
    }

    /**
     * 判斷指定Date日期是否在N天前的0點
     * 示例:
     * Date:當前時間15日0點0分1秒 int:days:14
     * true:Date在1日0點0分0秒前 false:Date在1日0分0秒後至當前時間
     *
     * @param date 日期
     * @param days 天
     * @return true:是 false:否
     */
    public static boolean isDateBeforeSpecifiedFewDaysAgo(Date date, int days) {
        // 獲取指定的時間的LocalDateTime類型
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime dateTime = date.toInstant().atZone(zoneId).toLocalDateTime();
        // 今日凌晨 0 點
        LocalDateTime todayDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
        // n天前的0點
        LocalDateTime specifiedDateTime = todayDateTime.minusDays(days);
        return dateTime.isBefore(specifiedDateTime);
    }

    /**
     * 獲取當前時間x小時前的Date
     *
     * @param hours 小時數
     * @return Date x小時前的Date
     */
    public static Date getXHoursBeforeNow(long hours) {
        return Date.from(LocalDateTime.now().minusHours(hours).atZone(ZoneId.systemDefault()).toInstant());
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章