package com.malk.Util; import cn.hutool.core.util.ObjectUtil; import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import javax.annotation.Nullable; import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.Temporal; import java.time.temporal.TemporalAdjusters; import java.util.Date; /** * 时间格式 [Calendar 日历类, Date 是java 8前产物, LocalDateTime] */ public abstract class UtilDateTime { public final static String DATE_PATTERN = "yyyy-MM-dd"; public final static String TIME_PATTERN = "HH:mm:ss"; public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; /// T表示分隔符,Z表示的是UTC "yyyy-MM-dd'T'HH:mm:ss.SSS Z" //// convert //// // 将java.util.Date 转换为java8 的java.time.LocalDateTime,默认时区为东8区 public static LocalDateTime convertToLocalDateTimeFromDate(Date date) { return date.toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime(); } // 将java8 的 java.time.LocalDateTime 转换为 java.util.Date,默认时区为东8区 public static Date convertToDateFromLocalDateTime(LocalDateTime localDateTime) { return Date.from(localDateTime.toInstant(ZoneOffset.of("+8"))); } // 获取时间段内小时 public static float betweenHour(Temporal startInclusive, Temporal endExclusive) { return Duration.between(startInclusive, endExclusive).toMillis() / 60f; } // 获取上月第一天0点 public static LocalDateTime firstDayOfLastMonth(LocalDateTime dateTime) { int month = dateTime.getMonthValue() - 1; int year = dateTime.getYear(); if (month == 0) { month = 12; } return LocalDateTime.of(year, month, 1, 0, 0, 0); } // 计算时间差和指定如一月最后一天很方便, 如下个月第一天 .... [时间会保留传入时间] public static LocalDateTime firstDayOfNextMonth(LocalDateTime dateTime) { return dateTime.with(TemporalAdjusters.firstDayOfNextMonth()); } // 获取当天0点时间 public static LocalDateTime minLocalDateTime(@Nullable LocalDateTime dateTime) { return LocalDateTime.of(dateTime.toLocalDate(), LocalTime.MIN); } //// Date //// public static String formatDateTime(Date dateTime) { if (ObjectUtil.isNull(dateTime)) return ""; return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z").format(dateTime); } public static String formatDate(Date dateTime) { return new SimpleDateFormat(DATE_PATTERN).format(dateTime); } public static String formatTime(Date dateTime) { return new SimpleDateFormat(TIME_PATTERN).format(dateTime); } @SneakyThrows public static Date parseDateTime(String dateStr) { if (StringUtils.isBlank(dateStr)) { return new Date(); } return new SimpleDateFormat(DATE_TIME_PATTERN).parse(dateStr); } @SneakyThrows public static Date parseDate(String dateStr) { return new SimpleDateFormat(DATE_PATTERN).parse(dateStr); } @SneakyThrows public static Date parseTime(String dateStr) { return new SimpleDateFormat(TIME_PATTERN).parse(dateStr); } //// LocalDateTime //// public static String formatLocalDateTime(LocalDateTime dateTime) { if (ObjectUtil.isNull(dateTime)) return ""; return DateTimeFormatter.ofPattern(DATE_TIME_PATTERN).format(dateTime); } public static String formatLocalDate(LocalDate dateTime) { return DateTimeFormatter.ofPattern(DATE_PATTERN).format(dateTime); } public static String formatLocalTime(LocalTime dateTime) { return DateTimeFormatter.ofPattern(TIME_PATTERN).format(dateTime); } public static LocalDateTime parseLocalDateTime(String dateStr) { if (StringUtils.isBlank(dateStr)) { return LocalDateTime.now(); } return LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)); } public static LocalDate parseLocalDate(String dateStr) { return LocalDate.parse(dateStr, DateTimeFormatter.ofPattern(DATE_PATTERN)); } public static LocalTime parseLocalTime(String dateStr) { return LocalTime.parse(dateStr, DateTimeFormatter.ofPattern(TIME_PATTERN)); } }