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());
}
}