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”;
}
- 当前年每月第一天