package cn.chnmuseum.party.common.util; import java.time.*; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class DateUtil80 { // 格式:年-月-日 小时:分钟:秒 public static final String FORMAT_ONE = "yyyy-MM-dd HH:mm:ss"; public static final String FORMAT_T = "yyyy-MM-ddTHH:mm:ss"; // 格式:年-月-日 小时:分钟 public static final String FORMAT_TWO = "yyyy-MM-dd HH:mm"; // 格式:年-月-日 public static final String LONG_DATE_FORMAT = "yyyy-MM-dd"; // 格式:月-日 public static final String SHORT_DATE_FORMAT = "MM-dd"; // 格式:小时:分钟:秒 public static final String LONG_TIME_FORMAT = "HH:mm:ss"; // 格式:年-月 public static final String MONTG_DATE_FORMAT = "yyyy-MM"; // 格式:年-月 public static final String Chinese_DATE_FORMAT = "yyyy年MM月dd日 HH:mm"; private static final ConcurrentMap<String, DateTimeFormatter> FORMATTER_CACHE = new ConcurrentHashMap<>(); private static final int PATTERN_CACHE_SIZE = 500; /** * Date转换为格式化时间 * * @param date date * @param pattern 格式 * @return */ public static String format(Date date, String pattern) { return format(LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()), pattern); } /** * localDateTime转换为格式化时间 * * @param localDateTime localDateTime * @param pattern 格式 * @return */ public static String format(LocalDateTime localDateTime, String pattern) { DateTimeFormatter formatter = createCacheFormatter(pattern); return localDateTime.format(formatter); } /** * 格式化字符串转为Date * * @param time 格式化时间 * @param pattern 格式 * @return */ public static Date parseDate(String time, String pattern) { return Date.from(parseLocalDateTime(time, pattern).atZone(ZoneId.systemDefault()).toInstant()); } /** * 格式化字符串转为Date * * @return */ public static Date getCurrDateTime() { LocalDateTime localDateTime = LocalDateTime.now(); ZoneId zone = ZoneId.systemDefault(); Instant instant = localDateTime.atZone(zone).toInstant(); return Date.from(instant); } /** * 格式化字符串转为Date * * @return */ public static Date getCurrDate() { ZoneId zoneId = ZoneId.systemDefault(); LocalDate localDate = LocalDate.now(); ZonedDateTime zdt = localDate.atStartOfDay(zoneId); return Date.from((zdt).toInstant()); } //LocalDateTime -> Date public static Date asDate(LocalDateTime localDateTime) { return Date.from(localDateTime.atZone(ZoneId.of("Asia/Shanghai")).toInstant()); } /** * 格式化字符串转为LocalDateTime * * @param time 格式化时间 * @param pattern 格式 * @return */ public static LocalDateTime parseLocalDateTime(String time, String pattern) { DateTimeFormatter formatter = createCacheFormatter(pattern); return LocalDateTime.parse(time, formatter); } /** * 将long类型的timestamp转为LocalDateTime * * @param timestamp * @return */ public static LocalDateTime getDateTimeOfTimestamp(long timestamp) { Instant instant = Instant.ofEpochMilli(timestamp); ZoneId zone = ZoneId.systemDefault(); return LocalDateTime.ofInstant(instant, zone); } /** * 在缓存中创建DateTimeFormatter * * @param pattern 格式 * @return */ private static DateTimeFormatter createCacheFormatter(String pattern) { if (pattern == null || pattern.length() == 0) { throw new IllegalArgumentException("Invalid pattern specification"); } DateTimeFormatter formatter = FORMATTER_CACHE.get(pattern); if (formatter == null) { if (FORMATTER_CACHE.size() < PATTERN_CACHE_SIZE) { formatter = DateTimeFormatter.ofPattern(pattern); DateTimeFormatter oldFormatter = FORMATTER_CACHE.putIfAbsent(pattern, formatter); if (oldFormatter != null) { formatter = oldFormatter; } } } return formatter; } }