封装LocalDateTime工具类

LocalDateTime工具类

import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;

/**

  • @author zwj
    /
    public class LocalDateTimeUtil {
    /
    *

    • 1.获取传入时间的12个月 (每月1号0点时间 列表/每月最后一天最晚时间 列表)

    • @param monthStatus

    • @return
      */
      public static List listMonthsTimeOfCurrentYear(LocalDateTime dateTime, String monthStatus) {
      List dateList = new ArrayList<>();
      // if:获取每月1号 0点时间;else if:获取每月最后一天最晚时间
      if (LocalDateTimeConsts.FIRST_DAY_MONTHS.equals(monthStatus)) {
      for (int month = 0; month < 12; month++) {
      // 获取每月1号0点时间并添加到dateList列表
      dateList.add(dateTime.withMonth(month + 1).with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN));
      }
      } else if (LocalDateTimeConsts.LAST_DAY_MONTHS.equals(monthStatus)) {
      for (int month = 0; month < 12; month++) {
      // 获取每月最后1天最晚时间并添加到dateList列表
      dateList.add(dateTime.withMonth(month + 1).with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX));
      }
      }

      return dateList;
      }

    /**

    • 2.获取传入时间当前月的每周周一0点时间 列表/获取传入时间当前月的每周周日最晚时间 列表
    • @param weekStatus
    • @return
      */
      public static List listWeeksTimeOfCurrentMonth(LocalDateTime dateTime, String weekStatus) {
      List dateList = new ArrayList<>();
      if (LocalDateTimeConsts.FIRST_DAY_WEEKS.equals(weekStatus)) {
      // 获取本月第一个 周一开始时间
      LocalDateTime firstDayOfWeeks = dateTime.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)).with(LocalTime.MIN);
      // 判断获得的周一是否为当前月
      while (dateTime.getMonth().equals(firstDayOfWeeks.getMonth())){
      // 符合条件添加到list列表
      dateList.add(firstDayOfWeeks);
      // 获得下周 周一的开始时间
      firstDayOfWeeks = firstDayOfWeeks.plusWeeks(1);
      }
      } else if (LocalDateTimeConsts.LAST_DAY_WEEKS.equals(weekStatus)) {
      // 获取本月第一个 周日结束时间
      LocalDateTime firstDayOfWeeks = dateTime.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY)).with(LocalTime.MAX);
      // 判断获得周日是否为当前月
      while (dateTime.getMonth().equals(firstDayOfWeeks.getMonth())){
      // 符合条件添加到list列表
      dateList.add(firstDayOfWeeks);
      // 获得下周 周日的结束时间
      firstDayOfWeeks = firstDayOfWeeks.plusWeeks(1);
      }
      }
      return dateList;
      }

    /**

    • 4.传入一个常量参数, 获取当天最早时间/最晚时间/当前周 周一最早时间
    • /当前周 周日最晚时间/当前月最早时间/当前月最晚时间/当前 年最早时间/当前年最晚时间
    • @param currentTimeStatus
    • @return
      */
      public static LocalDateTime getFirstOrLastTime(LocalDateTime dateTime, String currentTimeStatus) {
      // 定义tempDay 两个时间相隔天数
      int tempDay = 0;
      switch (currentTimeStatus) {
      // 获得当天最早时间
      case LocalDateTimeConsts.FIRST_TIME_DAY:
      // 将时间设置为当天最早时间
      dateTime = dateTime.with(LocalTime.MIN);
      break;
      // 获得当天最晚时间
      case LocalDateTimeConsts.LAST_TIME_DAY:
      // 将时间设置为当天最晚时间
      dateTime = dateTime.with(LocalTime.MAX);
      break;
      // 获得当前周 周一最早时间
      case LocalDateTimeConsts.FIRST_DAY_WEEK:
      // 获取 当前天 相隔 周一 差几天
      tempDay = dateTime.getDayOfWeek().getValue() - 1;
      // 获得 周一最早时间
      dateTime = dateTime.minusDays(tempDay).with(LocalTime.MIN);
      break;
      // 获得当前周 周日最晚时间
      case LocalDateTimeConsts.LAST_DAY_WEEK:
      // 获取 周日 相隔 当前天 差几天
      tempDay = 7 - dateTime.getDayOfWeek().getValue();
      // 获得 周日最晚时间
      dateTime = dateTime.plusDays(tempDay).with(LocalTime.MAX);
      break;
      // 获得当前月 最早时间
      case LocalDateTimeConsts.FIRST_DAY_MONTH: {
      dateTime = dateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
      break;
      }
      // 获得当前月 最晚时间
      case LocalDateTimeConsts.LAST_DAY_MONTH: {
      dateTime = dateTime.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
      break;
      }
      // 获得当前年 最早时间
      case LocalDateTimeConsts.FIRST_DAY_YEAR: {
      dateTime = dateTime.with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN);
      break;
      }
      // 获得当前年 最晚时间
      case LocalDateTimeConsts.LAST_DAY_YEAR: {
      dateTime = dateTime.with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX);
      break;
      }
      default:
      System.out.println(“传入的条件不合法”);
      }
      return dateTime;
      }

    /**

    • 5.传入两个时间参数,获取两个时间点之间的间隔天数/小时/分钟/秒/毫秒

    • @param dateTime1

    • @param dateTime2

    • @param timeUnits

    • @return
      */
      public static long calTimeDiff(LocalDateTime dateTime1, LocalDateTime dateTime2, String timeUnits) {
      long intervalTime = 0;
      // 如果传入的dateTime1 > dateTime2 则交换两者的值
      if (dateTime1.until(dateTime2, ChronoUnit.NANOS) < 0) {
      // 取个时间中间变量
      LocalDateTime tempDateTime = LocalDateTime.from(dateTime1);
      dateTime1 = dateTime2;
      dateTime2 = tempDateTime;
      }
      switch (timeUnits) {
      // 获取天数差
      case LocalDateTimeConsts.TIME_UNITS_DAYS:
      intervalTime = dateTime1.until(dateTime2, ChronoUnit.DAYS);
      break;
      // 获取小时差
      case LocalDateTimeConsts.TIME_UNITS_HOURS:
      intervalTime = dateTime1.until(dateTime2, ChronoUnit.HOURS);
      break;
      // 获取分钟差
      case LocalDateTimeConsts.TIME_UNITS_MINUTES:
      intervalTime = dateTime1.until(dateTime2, ChronoUnit.MINUTES);
      break;
      // 获取秒钟差
      case LocalDateTimeConsts.TIME_UNITS_SECONDS:
      intervalTime = dateTime1.until(dateTime2, ChronoUnit.SECONDS);
      break;
      // 获取毫秒差
      case LocalDateTimeConsts.TIME_UNITS_MILLIS:
      intervalTime = dateTime1.until(dateTime2, ChronoUnit.MILLIS);
      break;
      default:
      System.out.println(“传入的条件不支持获取间隔时间差”);
      }

      return intervalTime;
      }
      }

LocalDateTime工具类用到的常量类

/**

  • @Author zwj

  • @create 2020/10/22 17:24
    /
    public class LocalDateTimeConsts {
    /
    *

    • 当前年每月第一天
      /
      public static final String FIRST_DAY_MONTHS = “firstDayOfMonths”;
      /
      *
    • 当前年每月最后一天
      */
      public static final String LAST_DAY_MONTHS = “lastDayOfMonths”;

    /**

    • 当前月每周第一天
      /
      public static final String FIRST_DAY_WEEKS = “firstDayOfWeeks”;
      /
      *
    • 当前月每周最后一天
      */
      public static final String LAST_DAY_WEEKS = “lastDayOfWeeks”;

    /**

    • 当天最早时间
      /
      public static final String FIRST_TIME_DAY = “firstTimeOfDay”;
      /
      *
    • 当天最晚时间
      */
      public static final String LAST_TIME_DAY = “lastTimeOfDay”;

    /**

    • 当前周 周一最早时间
      */
      public static final String FIRST_DAY_WEEK = “firstDayOfWeek”;

    /**

    • 当前周 周日最晚时间
      */
      public static final String LAST_DAY_WEEK = “lastDayOfWeek”;

    /**

    • 当前月 最早时间
      */
      public static final String FIRST_DAY_MONTH = “firstDayOfMonth”;

    /**

    • 当前月 最晚时间
      */
      public static final String LAST_DAY_MONTH = “lastDayOfMonth”;

    /**

    • 当前年 最早时间
      */
      public static final String FIRST_DAY_YEAR = “firstDayOfYear”;

    /**

    • 当前年 最早时间
      */
      public static final String LAST_DAY_YEAR = “lastDayOfYear”;

    /**

    • 时间参数 天
      */
      public static final String TIME_UNITS_DAYS = “timeUnitsDays”;

    /**

    • 时间参数 小时
      */
      public static final String TIME_UNITS_HOURS = “timeUnitsHours”;

    /**

    • 时间参数 分钟
      */
      public static final String TIME_UNITS_MINUTES = “timeUnitsMinutes”;

    /**

    • 时间参数 秒
      */
      public static final String TIME_UNITS_SECONDS = “timeUnitsSeconds”;

    /**

    • 时间参数 毫秒
      */
      public static final String TIME_UNITS_MILLIS = “timeUnitsMillis”;
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值