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