系统性整理了下Java8的时间API,编写了个工具类
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;
/**
* 日期工具类
*
* @author turbo
* @create 2019-08-02 上午10:45
**/
public class DateUtil {
public static final String YYYY_MM_DD = "yyyy-MM-dd";
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
public static final String YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss:SSS";
public static final String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS";
public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
public static final ZoneOffset ZONE_OFFSET = ZoneOffset.of("+8");
public static final ZoneId ZONE_ID = ZoneId.systemDefault();
/**
* 获取当前时间戳
* @return Long
*/
public static Long getTimeStamp(){//Instant.now().toEpochMilli() return Clock.systemDefaultZone().millis() }/** * 解析日期 - 支持的格式:YYYY_MM_DD * @param str * @return */ public static LocalDateTime parseLocalDate(String str){ return LocalDateTime.of(LocalDate.parse(str, DateTimeFormatter.ofPattern(YYYY_MM_DD)), LocalTime.now()); } /** * 通过字符串获取 LocalDateTime * @param str 支持的格式:YYYY_MM_DD_T_HH_MM_SS_SSS 默认支持 * @return */ public static LocalDateTime parseTDate(String str){ return LocalDateTime.parse(str); } /** * 通过字符串获取 LocalDateTime * @param str 支持的格式:YYYY_MM_DD_HH_MM_SS * @return */ public static LocalDateTime parseDate(String str){ return parseDate(str,YYYY_MM_DD_HH_MM_SS); } /** * 通过字符串获取 LocalDateTime * @param str * @return */ public static LocalDateTime parseDate(String str,String pattern){ return LocalDateTime.parse(str, DateTimeFormatter.ofPattern(pattern)); } /** * 通过localDateTime 格式化时间 * @param localDateTime * @return */ public static String formartDate(LocalDateTime localDateTime){ return formartDate(localDateTime,YYYY_MM_DD_HH_MM_SS); } /** * 通过localDateTime 格式化时间 * @param localDateTime * @return */ public static String formartDate(LocalDateTime localDateTime,String parttern){ return localDateTime.format(DateTimeFormatter.ofPattern(parttern)); } /** * 获取毫秒 * @param localDateTime * @return */ public static Long getEpochMilli(LocalDateTime localDateTime){ return localDateTime.toInstant(ZONE_OFFSET).toEpochMilli(); } public static Long getEpochMilli(){ return getEpochMilli(LocalDateTime.now()); } /** * 获取秒 * @param localDateTime * @return */ public static Long getEpochSecond(LocalDateTime localDateTime){ return localDateTime.toEpochSecond(ZONE_OFFSET); } /** * 通过毫秒获取 LocalDateTime * @param epochMilli * @return */ public static LocalDateTime getLocalDateTimeByMilli(Long epochMilli){ return LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZONE_ID); } /** * 通过秒获取 LocalDateTime * @param epochSecond * @return */ public static LocalDateTime getLocalDateTimeBySecond(Long epochSecond){ LocalDateTime.ofInstant(Instant.ofEpochSecond(epochSecond), ZONE_ID); return LocalDateTime.ofEpochSecond(epochSecond, 0, ZONE_OFFSET); } /** * 获取当前天的最大时间 * @return Long */ public static Long getMaxLongTime(){ return getEpochMilli(LocalDateTime.now()); } /** * 获取当前天的最小时间 * @return Long */ public static Long getMinLongTime(){ return getEpochMilli(LocalDateTime.now()); } /** * 获取最大时间 * @param localDateTime * @return LocalDateTime */ public static LocalDateTime getMaxTime(LocalDateTime localDateTime){ return LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.MAX); } /** * 获取最小时间 * @param localDateTime * @return LocalDateTime */ public static LocalDateTime getMinTime(LocalDateTime localDateTime){ return LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.MIN); } //天数加1 public static LocalDateTime plusDays(LocalDateTime localDateTime,long days){ return localDateTime.plusDays(days); } public static LocalDateTime plusDays(long days){ return plusDays(LocalDateTime.now(),1); } public static LocalDateTime minusDays(LocalDateTime localDateTime,long days){ return localDateTime.minusDays(days); } public static LocalDateTime minusDays(long days){ return minusDays(LocalDateTime.now(),1); } /** * date转换为LocalDateTime * @param date * @return LocalDateTime */ public static LocalDateTime date2LocalDate(Date date){ return LocalDateTime.ofInstant(date.toInstant(),ZONE_ID); } /** * LocalDateTime转换为Date * @param localDateTime * @return Date */ public static Date LocalDate2date(LocalDateTime localDateTime){ return Date.from(localDateTime.toInstant(ZONE_OFFSET)); } /** * 计算两个日期之间的天数差 * @param a * @param b * @return */ public static int periodLocalDate(LocalDateTime a,LocalDateTime b){ return Period.between(a.toLocalDate(),b.toLocalDate()).getDays(); } public static long chronoUnitLocalDate(LocalDateTime a,LocalDateTime b){ return ChronoUnit.DAYS.between(a.toLocalDate(),b.toLocalDate()); } /** * 计算连个时间的秒差 * @param a * @param b * @return */ public static long DurationLocalTime(LocalDateTime a,LocalDateTime b){ return Duration.between(a.toLocalTime(),b.toLocalTime()).getSeconds(); } public static long chronoUnitLocalTime(LocalDateTime a,LocalDateTime b){ return ChronoUnit.SECONDS.between(a.toLocalTime(),b.toLocalTime()); } }
参考地址: