package cn.lihu.jh.framework.common.util.date; import cn.hutool.core.date.LocalDateTimeUtil; import java.time.*; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; /** * 时间工具类 * * @author 芋道源码 */ public class DateUtils { /** * 时区 - 默认 */ public static final String TIME_ZONE_DEFAULT = "GMT+8"; /** * 秒转换成毫秒 */ public static final long SECOND_MILLIS = 1000; public static final String FORMAT_YEAR_MONTH_DAY = "yyyy-MM-dd"; public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; /** * 将 LocalDateTime 转换成 Date * * @param date LocalDateTime * @return LocalDateTime */ public static Date of(LocalDateTime date) { if (date == null) { return null; } // 将此日期时间与时区相结合以创建 ZonedDateTime ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault()); // 本地时间线 LocalDateTime 到即时时间线 Instant 时间戳 Instant instant = zonedDateTime.toInstant(); // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间 return Date.from(instant); } /** * 将 Date 转换成 LocalDateTime * * @param date Date * @return LocalDateTime */ public static LocalDateTime of(Date date) { if (date == null) { return null; } // 转为时间戳 Instant instant = date.toInstant(); // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间 return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); } /** * 将 Date 转换成 LocalDateTime * * @param date Date * @return LocalDateTime */ public static LocalDateTime ofUTC(Date date) { if (date == null) { return null; } // 转为时间戳 Instant instant = date.toInstant(); // UTC时间 return LocalDateTime.ofInstant(instant, TimeZone.getTimeZone( "GMT" ).toZoneId()); } public static Date addTime(Duration duration) { return new Date(System.currentTimeMillis() + duration.toMillis()); } public static boolean isExpired(LocalDateTime time) { LocalDateTime now = LocalDateTime.now(); return now.isAfter(time); } /** * 创建指定时间 * * @param year 年 * @param mouth 月 * @param day 日 * @return 指定时间 */ public static Date buildTime(int year, int mouth, int day) { return buildTime(year, mouth, day, 0, 0, 0); } /** * 创建指定时间 * * @param year 年 * @param mouth 月 * @param day 日 * @param hour 小时 * @param minute 分钟 * @param second 秒 * @return 指定时间 */ public static Date buildTime(int year, int mouth, int day, int hour, int minute, int second) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, mouth - 1); calendar.set(Calendar.DAY_OF_MONTH, day); calendar.set(Calendar.HOUR_OF_DAY, hour); calendar.set(Calendar.MINUTE, minute); calendar.set(Calendar.SECOND, second); calendar.set(Calendar.MILLISECOND, 0); // 一般情况下,都是 0 毫秒 return calendar.getTime(); } public static Date max(Date a, Date b) { if (a == null) { return b; } if (b == null) { return a; } return a.compareTo(b) > 0 ? a : b; } public static LocalDateTime max(LocalDateTime a, LocalDateTime b) { if (a == null) { return b; } if (b == null) { return a; } return a.isAfter(b) ? a : b; } /** * 是否今天 * * @param date 日期 * @return 是否 */ public static boolean isToday(LocalDateTime date) { return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now()); } /** * 是否今天 * * @param date 日期 * @return 是否 */ public static boolean isToday(LocalDate date) { return LocalDateTimeUtil.isSameDay(date, LocalDate.now()); } /** * 是否昨天 * * @param date 日期 * @return 是否 */ public static boolean isYesterday(LocalDateTime date) { return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now().minusDays(1)); } }