Date 與 LocalDateTime 互轉
/**
* LocalDateTime 轉 Date
*
* @param localDateTime
* @return
*/
public static Date convertLocalDateTimeToDate(LocalDateTime localDateTime) {
ZoneId zoneId = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zoneId).toInstant();
return Date.from(instant);
}
/**
* Date 轉 LocalDateTime
*
* @param date
* @return
*/
public static LocalDateTime convertToLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zoneId);
}
Date 與 LocalDate 互轉
/**
* LocalDate 轉 Date
*
* @param localDate
* @return
*/
public static Date convertLocalDateToDate(LocalDate localDate) {
ZoneId zoneId = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zoneId).toInstant();
return Date.from(instant);
}
/**
* LocalDate&LocalTime 轉 Date
*
* @param localDate
* @param localTime
* @return
*/
public static Date convertLocalTimeToDate(LocalDate localDate, LocalTime localTime) {
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
Instant instant = localDateTime.atZone(zoneId).toInstant();
return Date.from(instant);
}
獲取 Date 的當天開始時間
/**
* 獲取date當天的開始日期
*
* @param date
* @return
*/
public static Date getFirstTimeOfDay(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
return Date.from(LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.MIN).atZone(ZoneId.systemDefault()).toInstant());
}
獲取 Date 的當天結束時間
/**
* 獲取date當天的最後時間
*
* @param date
* @return
*/
public static Date getEndTimeOfDay(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
return Date.from(LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant());
}
獲取date所屬月份第一天
/**
* 獲取date所屬月份第一天
*
* @param date
* @return
*/
public static Date getFirstDayOfMonth(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
ZonedDateTime zonedDateTime = LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.MIN).with(TemporalAdjusters.firstDayOfMonth()).atZone(ZoneId.systemDefault());
return Date.from(zonedDateTime.toInstant());
}
獲取date所屬月份最後一天
/**
* 獲取date所屬月份最後一天
*
* @param date
* @return
*/
public static Date getEndDayOfMonth(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
ZonedDateTime zonedDateTime = LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.MAX).with(TemporalAdjusters.lastDayOfMonth()).atZone(ZoneId.systemDefault());
return Date.from(zonedDateTime.toInstant());
}
獲取兩個日期之間所有日期集合
/**
* 獲取兩個日期之間所有日期集合
*
* @param startDate
* @param endDate
* @return
*/
public static List<LocalDate> getDatesBetween(Date startDate, Date endDate) {
LocalDate localStartDate = convertToLocalDate(startDate);
LocalDate localEndDate = convertToLocalDate(endDate);
long numOfDaysBetween = ChronoUnit.DAYS.between(localStartDate, localEndDate) + 1;
return IntStream.iterate(0, i -> i + 1).limit(numOfDaysBetween).mapToObj(i -> localStartDate.plusDays(i)).collect(Collectors.toList());
}
date加上days後的日期
/**
* date加上days後的日期
*
* @param date
* @return date加上days後的日期
*/
public static Date plusDays(Date date, int days) {
LocalDate localDate = convertToLocalDate(date);
return convertLocalDateToDate(localDate.plusDays(days));
}