package com.ydtech.modules.order.utils; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.time.*; import java.time.format.DateTimeFormatter; /** * @description: 保司 处理时间 工具类 * @author: wenks * @date: 2025/3/5 10:30 **/ public final class TimeProcessing { private TimeProcessing() { throw new IllegalStateException("Utility class"); } public static final DateTimeFormatter DATE_TIME_FORMATTER; static { DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); } public static final DateTimeFormatter DATE_FORMATTER; static { DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); } public static final long ONE = 1L; public static LocalDateTime parseDateTime(String date) { return LocalDateTime.parse(date, DATE_TIME_FORMATTER); } public static LocalDate parseDate(String date) { return LocalDate.parse(date, DATE_FORMATTER); } /** * 时间格式转换 * yyyy-MM-dd 转 yyyy-MM-dd HH:mm:ss * * @param date yyyy-MM-dd * @return yyyy-MM-dd HH:mm:ss */ public static String dateToDateTime(String date) { return LocalDateTime.of(LocalDate.parse(date, DATE_FORMATTER), LocalTime.MIN).format(DATE_TIME_FORMATTER); } public static String dateToDateTimeMax(String date) { return LocalDateTime.of(LocalDate.parse(date, DATE_FORMATTER), LocalTime.MAX).format(DATE_TIME_FORMATTER); } public static String dateTimeToDate(String dateTime) { return LocalDateTime.parse(dateTime, DATE_TIME_FORMATTER).format(DATE_FORMATTER); } /** * 一年以后减1秒得时间 (适用于零点时) * * @param date 开始时间 * @return 结束时间 */ public static String minusOneSecondAfterYear(String date) { return plusOneYear(date).minusSeconds(ONE).format(DATE_TIME_FORMATTER); } /** * 一年以后减1天得时间 (适用于不是零点时) * * @param date 开始时间 * @return 结束时间 */ public static String minusOneDayAfterYear(String date) { return plusOneYear(date).minusDays(ONE).minusSeconds(ONE).format(DATE_TIME_FORMATTER); } /** * 一年以后得时间 * * @param date 开始时间 * @return 结束时间 */ public static LocalDateTime plusOneYear(String date) { return parseDateTime(date).plusYears(ONE); } /** * 一年以后得时间 * * @param date 开始时间 * @return 结束时间 */ public static String plusOneYearToString(String date) { return plusOneYear(date).format(DATE_TIME_FORMATTER); } /** * 几天之前 * * @param date 时间 * @param days 天数 * @return */ public static String minusDays(String date, long days) { LocalDate parse = LocalDate.parse(date); return parse.minusDays(days).format(DATE_FORMATTER); } /** * 几天后 * * @param date 时间 * @param days 天数 * @return */ public static String plusDays(String date, long days) { LocalDate parse = LocalDate.parse(date); return parse.plusDays(days).format(DATE_FORMATTER); } /** * 今天的日期 * * @return */ public static String nowDate() { return LocalDate.now().format(DATE_FORMATTER); } public static String nowDateTime() { return LocalDateTime.now().format(DATE_TIME_FORMATTER); } /** * 明天的 整点日期 * @param time * @return */ public static String tomorrowDateTime(String time) { // 解析传入的时间字符串 LocalDateTime localDateTime = LocalDateTime.parse(time, DATE_TIME_FORMATTER); // 加1天,并设置为 00:00:00 return localDateTime.plusDays(1) .toLocalDate() .atStartOfDay() .format(DATE_TIME_FORMATTER); } /** * 明天的 明天0点0分0秒 * * @return 明天0点0分0秒 */ public static String tomorrowDateTime() { return LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIN).format(DATE_TIME_FORMATTER); } public static String tomorrowDate() { return LocalDate.now().plusDays(1).format(DATE_FORMATTER); } /** * 获取时间范围 * 用于查询订单的时候按照时间范围查询 * * @param date 时间 * @param isDateTime 是否要返回时间类型 * @return 时间范围 */ public static TimeFrame getTimeFrame(String date, boolean isDateTime) { LocalDate dateTime; if (date.length() > 10) { dateTime = LocalDate.parse(date, DATE_TIME_FORMATTER); } else { dateTime = LocalDate.parse(date, DATE_FORMATTER); } LocalDate localDate = dateTime.plusDays(ONE); if (isDateTime) { LocalDateTime startOfDay = LocalDateTime.of(dateTime, LocalTime.MIDNIGHT); LocalDateTime endOfDay = LocalDateTime.of(localDate, LocalTime.MIDNIGHT); return new TimeFrame(startOfDay.format(DATE_TIME_FORMATTER), endOfDay.format(DATE_TIME_FORMATTER)); } return new TimeFrame(dateTime.format(DATE_FORMATTER), localDate.format(DATE_FORMATTER)); } /** * 获取年份范围 * * @return 当前年的开始和结束日期 */ public static TimeFrame getYearRange() { int year = LocalDate.now().getYear(); LocalDate firstDay = LocalDate.of(year, 1, 1); LocalDate lastDay = LocalDate.of(year, 12, 31); return new TimeFrame(firstDay.format(DATE_FORMATTER), lastDay.format(DATE_FORMATTER)); } /** * 获取现在的时间 * * @return 现在时间 */ public static String getNowDateTime() { return LocalDateTime.now().format(DATE_TIME_FORMATTER); } /** * 使用年限计算 * * @param date 日期 * @return 年限 */ public static int serviceLife(String date) { LocalDate localDate = parseDate(date); LocalDate now = LocalDate.now(); Period between = Period.between(localDate, now); return between.getYears(); } /** * 获取去年的年份 * @return 去年的 年 */ public static int getLastYear(){ return LocalDate.now().minusYears(1).getYear(); } @Data @AllArgsConstructor @NoArgsConstructor public static class TimeFrame { /** * 开始时间 */ private String startTime; /** * 结束时间 */ private String endTime; } }