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<LocalDate> dateQuery = TemporalQueries.localDate(); 
 | 
  
 | 
    private static final TemporalQuery<LocalTime> 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; 
 | 
        } 
 | 
    } 
 | 
} 
 |