package org.yzh.commons.util; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.temporal.ChronoField; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalQueries; import java.time.temporal.TemporalQuery; /** * @author yezhihao * https://gitee.com/yezhihao/jt808-server */ public class DateUtils { public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); public static final DateTimeFormatter yyMMddHHmmss = DateTimeFormatter.ofPattern("yyMMddHHmmss"); public static final DateTimeFormatter yyyyMMdd = new DateTimeFormatterBuilder() .appendValue(ChronoField.YEAR_OF_ERA, 4) .appendValue(ChronoField.MONTH_OF_YEAR, 2) .appendValue(ChronoField.DAY_OF_MONTH, 2) .toFormatter(); public static final DateTimeFormatter yyMMdd = new DateTimeFormatterBuilder() .appendValueReduced(ChronoField.YEAR_OF_ERA, 2, 2, LocalDate.now().minusYears(80)) .appendValue(ChronoField.MONTH_OF_YEAR, 2) .appendValue(ChronoField.DAY_OF_MONTH, 2) .toFormatter(); public static final DateTimeFormatter yy = new DateTimeFormatterBuilder() .appendValueReduced(ChronoField.YEAR_OF_ERA, 2, 2, LocalDate.now().minusYears(80)) .toFormatter(); public static final ZoneOffset ZONE = ZoneOffset.systemDefault().getRules().getStandardOffset(Instant.now()); private static final TemporalQuery dateQuery = TemporalQueries.localDate(); private static final TemporalQuery timeQuery = TemporalQueries.localTime(); public static long currentTimeSecond() { return System.currentTimeMillis() / 1000L; } public static long getMillis(LocalDateTime dateTime) { return dateTime.toInstant(ZONE).toEpochMilli(); } public static LocalDateTime getDateTime(Long millis) { Instant instant = Instant.ofEpochMilli(millis); return LocalDateTime.ofEpochSecond(instant.getEpochSecond(), instant.getNano(), ZONE); } public static LocalDateTime getDateTime(Instant instant) { return LocalDateTime.ofEpochSecond(instant.getEpochSecond(), instant.getNano(), ZONE); } public static LocalDateTime parse(String str) { return parse(str, yyMMddHHmmss); } public static LocalDateTime parse(String str, DateTimeFormatter df) { try { TemporalAccessor temporal = df.parse(str); LocalDate date = temporal.query(dateQuery); LocalTime time = temporal.query(timeQuery); return LocalDateTime.of(date, time); } catch (Exception e) { return null; } } }