时间工具类(自用)

该代码提供了一个扩展自Hutool库的DateUtil类,包含获取指定日期前的年月数据、获取所属旬、季节等日期相关的功能。类中定义了常量和方法,如获取年月集合、日期所属旬的时间范围等,适用于需要进行复杂日期计算的场景。
摘要由CSDN通过智能技术生成

package com.ltd.cloud.meteorological.common.utils;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.ltd.cloud.common.core.exception.Asserts;
import com.ltd.cloud.meteorological.common.consts.DateUtilConstant;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**

  • @author :

  • @date :Created in 2022/8/17 17:11

  • @description:时间工具类

  • @modified By:

  • @version: $
    */
    public class DateUtils extends DateUtil {

    public static final DateTimeFormatter DATE_FORMAT_MM_DD = DateTimeFormatter.ofPattern(“MM月dd日”);
    public static final DateTimeFormatter DATE_FORMAT_MM_DD_2 = DateTimeFormatter.ofPattern(“MM-dd”);

    /**

    • 获取指定日期前的所有年月数据(含当前时间所属月份)
    • @param date 指定日期
    • @return 指定日期所属月份前所有年月-含指定日期
      */
      public static List getBelongYearMonthByDate(LocalDateTime date) {
      return getYearMonth(date, null, date.getMonthValue());
      }

    /**

    • 获取指定日期前一年的所有年月数据
    • @param date 指定日期
    • @return 指定日期前一年的所有年月数据(1 - 12月)
      */
      public static List getLastYearMonthByDate(LocalDateTime date) {
      return getYearMonth(date, date.getMonthValue(), 12);
      }

    /**

    • 获取指定日期前的所有年月数据(含当前时间所属月份)以及指定日期前一年的所有年月数据
    • @param date 指定日期
    • @return 指定日期前的所有年月数据(含当前时间所属月份)以及指定日期前一年的所有年月数据(1 - 12月)
      */
      public static List getALLYearMonthByDate(LocalDateTime date) {
      return getYearMonth(date, null, date.getMonthValue() + 12);
      }

    /**

    • 获取指定日期下的指定年月数据
    • @param date 日期信息
    • @param minusMonths 当前日期减去的天数
    • @param limitMonth 查询X个月的数据
    • @return 年月集合
      */
      public static List getYearMonth(LocalDateTime date, Integer minusMonths, Integer limitMonth) {
      List months = new ArrayList<>();
      if (ObjectUtil.isNotEmpty(minusMonths)) {
      date = date.minusMonths(date.getMonthValue());
      }
      Stream.iterate(date, d -> d.minusMonths(1)).limit(limitMonth).forEach(f -> {
      months.add(DateUtils.format(f, DatePattern.NORM_MONTH_PATTERN));
      });
      return months;
      }

    /**

    • 获取两个月份中间的所有月份
    • @param startMonth 开始月份
    • @param endMonth 结束月份
    • @return 月份集合
      */
      public static List getMiddleMonth(Integer startMonth, Integer endMonth) {
      if (null == startMonth || null == endMonth) {
      return null;
      }
      List months = new ArrayList<>();
      if (startMonth < endMonth) {
      for (int i = startMonth; i <= endMonth; i++) {
      months.add(i);
      }
      } else if (startMonth.equals(endMonth)) {
      months.add(startMonth);
      } else {
      for (int i = startMonth; i <= 12; i++) {
      months.add(i);
      }
      for (int i = endMonth; i >= 1; i–) {
      months.add(i);
      }
      }
      return months;
      }

    /**

    • 获取日期所属旬
    • @param day 日
    • @return 所属旬
      */
      public static String getDayBelongXun(Integer day) {
      if (null == day || day > 31 || day < 1) {
      Asserts.fail(DateUtilConstant.PARAMETER_ERRORS);
      }
      String xun = null;
      if (day >= 1 && day <= 10) {
      xun = DateUtilConstant.UP_XUN;
      } else if (day >= 11 && day <= 20) {
      xun = DateUtilConstant.CENTRE_XUN;
      } else {
      xun = DateUtilConstant.DOWN_XUN;
      }
      return xun;
      }

    public static Integer getDayBelongXunReturnInteger(Integer day) {
    if (null == day || day > 31 || day < 1) {
    Asserts.fail(DateUtilConstant.PARAMETER_ERRORS);
    }
    Integer xun = null;
    if (day >= 1 && day <= 10) {
    xun = 1;
    } else if (day >= 11 && day <= 20) {
    xun = 2;
    } else {
    xun = 3;
    }
    return xun;
    }

    /**

    • 获取日期所属旬的所有时间(yyyy-MM-dd)
    • @param localDate 时间
    • @return 所属旬的所有日期
      */
      public static List getDaysBelongXun(LocalDate localDate) {
      Integer day = localDate.getDayOfMonth();
      List dates = null;
      String xun = null;
      if (day >= 1 && day <= 10) {
      dates = getDate(day, localDate);
      } else if (day >= 11 && day <= 20) {
      dates = getDate(day - 10, localDate);
      } else {
      dates = getDate(day - 20, localDate);
      }
      return dates;
      }

    /**

    • 获取指定号数之前的所有日期(指定日期前的日期 格式:MM-dd)
    • @param days 天数
    • @param localDate 计算时间
    • @return 指定号数之间的所有日期
      */
      public static List getDateMonthDays(int days, LocalDate localDate) {
      return getDateMonthDays(days, localDate, DATE_FORMAT_MM_DD_2);
      }

    /**

    • 获取指定号数之前的所有日期(指定日期前的日期 格式:MM-dd)
    • @param days 天数
    • @param localDate 计算时间
    • @return 指定号数之间的所有日期
      */
      public static List getDate(int days, LocalDate localDate) {
      LocalDate date = null;
      List list = new ArrayList<>();
      for (int day = days - 1; day > 0; day–) {
      date = localDate.minusDays(day);
      list.add(date);
      }
      list.add(localDate);
      return list;
      }

    /**

    • 获取指定号数之前的所有日期(指定日期前的日期 格式:MM-dd)
    • @param days 天数
    • @param localDate 计算时间
    • @return 指定号数之间的所有日期
      */
      public static List getDateMonthDays(int days, LocalDate localDate, DateTimeFormatter formatter) {
      LocalDate date = null;
      List list = new ArrayList<>();
      for (int day = days - 1; day > 0; day–) {
      date = localDate.minusDays(day);
      list.add(date.format(formatter));
      }
      list.add(localDate.format(formatter));
      return list;
      }

    /**

    • 获取指定号数之后的所有日期(指定日期后的日期)
    • @param days 天数
    • @param localDate 计算时间
    • @return 指定号数之间的所有日期
      */
      public static List getAfterDateMonthDays(int days, LocalDate localDate) {
      LocalDate date = null;
      List list = new ArrayList<>();
      for (int day = 0; day <= days; day++) {
      date = localDate.plusDays(day);
      list.add(date);
      }
      return list;
      }

    /**

    • 获取月份所属季节
    • @param month 月份
    • @return 季节
      */
      public static String getSeasonByMonth(Integer month) {
      if (null == month || month > 12 || month < 1) {
      Asserts.fail(DateUtilConstant.PARAMETER_ERRORS);
      }
      String season = null;
      if (DateUtilConstant.SPRING_MONTH.contains(month)) {
      season = DateUtilConstant.SPRING;
      } else if (DateUtilConstant.SUMMER_MONTH.contains(month)) {
      season = DateUtilConstant.SUMMER;
      } else if (DateUtilConstant.AUTUMN_MONTH.contains(month)) {
      season = DateUtilConstant.AUTUMN;
      } else {
      season = DateUtilConstant.WINTER;
      }
      return season;
      }

    /**

    • 获取所属旬开始时间
    • @param date
    • @return
      */
      public static LocalDateTime getTenDayStartTime(LocalDateTime date) {
      int ten = getDayBelongXunReturnInteger(date.getDayOfMonth());
      if (ten == 1) {
      return LocalDateTime.of(LocalDate.from(date.with(TemporalAdjusters.firstDayOfMonth())), LocalTime.MIN);
      } else if (ten == 2) {
      return date.withDayOfMonth(11).withHour(0).withMinute(0).withSecond(0);
      } else {
      return date.withDayOfMonth(21).withHour(0).withMinute(0).withSecond(0);
      }
      }

    /**

    • 获取所属旬结束时间
    • @param date
    • @return
      */
      public static LocalDateTime getTenDayEndTime(LocalDateTime date) {
      int ten = getDayBelongXunReturnInteger(date.getDayOfMonth());
      if (ten == 1) {
      return date.withDayOfMonth(10).withHour(23).withMinute(59).withSecond(59);
      } else if (ten == 2) {
      return date.withDayOfMonth(20).withHour(23).withMinute(59).withSecond(59);
      } else {
      return LocalDateTime.of(LocalDate.from(date.with(TemporalAdjusters.lastDayOfMonth())), LocalTime.MAX);
      }
      }

    /**

    • 获取指定日期前指定年份
    • @param localDate 需要计算的时间
    • @param years 需要计算的年份数
    • @return 年份集合
      */
      public static List getDateAllYears(LocalDate localDate, int years) {
      LocalDate date = null;
      List list = new ArrayList<>();
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyy”);
      for (int day = years - 1; day > 0; day–) {
      date = localDate.minusYears(day);
      list.add(date.format(formatter));
      }
      list.add(localDate.format(formatter));
      return list;
      }
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值