记录一个比较全的java8操作时间的工具类:
package com.wm.test.util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
import java.util.Locale;
/***
* @ClassName: DateUtil
* @Description: java8日期工具类
* @Author: wm_yu
* @Create_time: 15:14 2019-10-26
*/
@Slf4j
public class DateUtil {
public final static String DATE_PATTERN_STRING = "yyyy-MM-dd";
/**
* 年-月-日 时:分:秒 标准样式
*/
public final static String DEFAULT_PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss";
/**
* localDate转换为Date
* @return
*/
public static Date localDateToDate(LocalDate localDate){
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
return Date.from(zdt.toInstant());
}
/**
* Date转换为localDate
* @param date
* @return
*/
public static LocalDate dateToLocalDate(Date date){
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
// atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。
return instant.atZone(zoneId).toLocalDate();
}
/**
* localDateTime转换为date
* @return
*/
public static Date localDateTimeToDate(LocalDateTime localDateTime){
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
//localDateTime转date
return Date.from(instant);
}
/**
* Date转换为localDateTime
* @param date
* @return
*/
public static LocalDateTime dateToLocalDateTime(Date date){
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
//date转localDateTime
return LocalDateTime.ofInstant(instant, zone);
}
/**
* 获取两个字符串日期的相差天数
* @param startDateString
* @param endDateString
* @param formatString
* @return
*/
public static long getDays(String startDateString,String endDateString,String formatString){
try {
if(StringUtils.isEmpty(formatString)){
formatString = DATE_PATTERN_STRING;
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatString);
LocalDate startDate = LocalDate.parse(startDateString, formatter);
LocalDate endDate = LocalDate.parse(endDateString, formatter);
long days = endDate.toEpochDay() - startDate.toEpochDay();
return days;
} catch (Exception e) {
log.error("时间解析异常:{}",e.getMessage(),e);
}
return 0;
}
/**
* 格式化年月日为字符串
*
* @param date 传入需要格式化的日期
* @param pattern 需要格式化的格式
* @return String 返回格式化的日期
*/
public static String formatterLocalDateToString(Date date, String pattern) {
LocalDate localDate = dateToLocalDate(date);
DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(pattern);
return getLocalDateFormat(localDate, dateTimeFormatter);
}
/**
* 格式化年月日时分秒为字符串
*
* @param date 传入需要格式化的日期
* @param pattern 需要格式化的格式
* @return String 返回格式化的日期
*/
public static String formatterLocalDateTimeToString(Date date, String pattern) {
LocalDateTime localDateTime = dateToLocalDateTime(date);
DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(pattern);
return getLocalDateTimeFormat(localDateTime, dateTimeFormatter);
}
/**
* 时区格式化年月日为字符串
*
* @param date 传入需要格式化的日期
* @param pattern 需要格式化的格式
* @param locale 国际时区 Locale.CHINA
* @return String 返回格式化的日期
*/
public static String formatterLocalDateToString(Date date,String pattern,Locale locale) {
LocalDate localDate = dateToLocalDate(date);
DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(pattern, locale);
return getLocalDateFormat(localDate, dateTimeFormatter);
}
/**
* 时区格式化年月日时分秒为字符串
*
* @param date 传入需要格式化的日期
* @param pattern 需要格式化的格式
* @para