|
|
@@ -0,0 +1,463 @@
|
|
|
+package com.ydtech.modules.inv.utils;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author jianlong
|
|
|
+ * @date 2024-01-24 18:26
|
|
|
+ */
|
|
|
+import java.time.*;
|
|
|
+import java.time.temporal.ChronoUnit;
|
|
|
+import java.time.temporal.TemporalAdjusters;
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
+/**
|
|
|
+ * LocalDateTime工具类
|
|
|
+ *
|
|
|
+ * @author CL
|
|
|
+ */
|
|
|
+public class LocalDateTimeUtils {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 当前时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime now() {
|
|
|
+ return LocalDateTime.now();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Date 转 LocalDateTime
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime convert(Date date) {
|
|
|
+ return LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取12月前第一天
|
|
|
+ */
|
|
|
+ public static LocalDateTime get12MonthsBefore() {
|
|
|
+ return LocalDateTime.now().minusMonths(12).with(TemporalAdjusters.firstDayOfMonth());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前月最后一天
|
|
|
+ */
|
|
|
+ public static LocalDateTime getTodayLastDay() {
|
|
|
+ return LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * LocalDateTime 转 Date
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date convert(LocalDateTime localDateTime) {
|
|
|
+ return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 今天开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime todayStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 今天结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime todayEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 昨天开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime yesterdayStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.DAYS), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 昨天结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime yesterdayEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.DAYS), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 最近7天开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime last7DaysStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().minus(6L, ChronoUnit.DAYS), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 最近7天结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime last7DaysEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 最近30天开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime last30DaysStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().minus(29L, ChronoUnit.DAYS), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 最近30天结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime last30DaysEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 最近一年开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime last1YearStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.YEARS).plus(1L, ChronoUnit.DAYS), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 最近一年结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime last1YearEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本周开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime weekStartTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ return LocalDateTime.of(now.minusDays(now.getDayOfWeek().getValue() - 1), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本周结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime weekEndTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ return LocalDateTime.of(now.plusDays(7 - now.getDayOfWeek().getValue()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本月开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime monthStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本月结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime monthEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本季度开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime quarterStartTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ Month month = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
|
|
+ return LocalDateTime.of(LocalDate.of(now.getYear(), month, 1), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本季度结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime quarterEndTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ Month month = Month.of(now.getMonth().firstMonthOfQuarter().getValue()).plus(2L);
|
|
|
+ return LocalDateTime.of(LocalDate.of(now.getYear(), month, month.length(now.isLeapYear())), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本半年开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime halfYearStartTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ Month month = (now.getMonthValue() > 6) ? Month.JULY : Month.JANUARY;
|
|
|
+ return LocalDateTime.of(LocalDate.of(now.getYear(), month, 1), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本半年结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime halfYearEndTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ Month month = (now.getMonthValue() > 6) ? Month.DECEMBER : Month.JUNE;
|
|
|
+ return LocalDateTime.of(LocalDate.of(now.getYear(), month, month.length(now.isLeapYear())), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本年开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime yearStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 本年结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime yearEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上周开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastWeekStartTime() {
|
|
|
+ LocalDate lastWeek = LocalDate.now().minus(1L, ChronoUnit.WEEKS);
|
|
|
+ return LocalDateTime.of(lastWeek.minusDays(lastWeek.getDayOfWeek().getValue() - 1), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上周结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastWeekEndTime() {
|
|
|
+ LocalDate lastWeek = LocalDate.now().minus(1L, ChronoUnit.WEEKS);
|
|
|
+ return LocalDateTime.of(lastWeek.plusDays(7 - lastWeek.getDayOfWeek().getValue()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上月开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastMonthStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上月结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastMonthEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上季度开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastQuarterStartTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
|
|
+ Month firstMonthOfLastQuarter = firstMonthOfQuarter.minus(3L);
|
|
|
+ int yearOfLastQuarter = firstMonthOfQuarter.getValue() < 4 ? now.getYear() - 1 : now.getYear();
|
|
|
+ return LocalDateTime.of(LocalDate.of(yearOfLastQuarter, firstMonthOfLastQuarter, 1), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上季度结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastQuarterEndTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
|
|
+ Month firstMonthOfLastQuarter = firstMonthOfQuarter.minus(1L);
|
|
|
+ int yearOfLastQuarter = firstMonthOfQuarter.getValue() < 4 ? now.getYear() - 1 : now.getYear();
|
|
|
+ return LocalDateTime.of(LocalDate.of(yearOfLastQuarter, firstMonthOfLastQuarter, firstMonthOfLastQuarter.maxLength()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上半年开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastHalfYearStartTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ int lastHalfYear = (now.getMonthValue() > 6) ? now.getYear() : now.getYear() - 1;
|
|
|
+ Month firstMonthOfLastHalfYear = (now.getMonthValue() > 6) ? Month.JANUARY : Month.JULY;
|
|
|
+ return LocalDateTime.of(LocalDate.of(lastHalfYear, firstMonthOfLastHalfYear, 1), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上半年结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastHalfYearEndTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ int lastHalfYear = (now.getMonthValue() > 6) ? now.getYear() : now.getYear() - 1;
|
|
|
+ Month lastMonthOfLastHalfYear = (now.getMonthValue() > 6) ? Month.JUNE : Month.DECEMBER;
|
|
|
+ return LocalDateTime.of(LocalDate.of(lastHalfYear, lastMonthOfLastHalfYear, lastMonthOfLastHalfYear.maxLength()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上一年开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastYearStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上一年结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime lastYearEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下周开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextWeekStartTime() {
|
|
|
+ LocalDate nextWeek = LocalDate.now().plus(1L, ChronoUnit.WEEKS);
|
|
|
+ return LocalDateTime.of(nextWeek.minusDays(nextWeek.getDayOfWeek().getValue() - 1), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下周结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextWeekEndTime() {
|
|
|
+ LocalDate nextWeek = LocalDate.now().plus(1L, ChronoUnit.WEEKS);
|
|
|
+ return LocalDateTime.of(nextWeek.plusDays(7 - nextWeek.getDayOfWeek().getValue()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下月开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextMonthStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下月结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextMonthEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下季度开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextQuarterStartTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
|
|
+ Month firstMonthOfNextQuarter = firstMonthOfQuarter.plus(3L);
|
|
|
+ int yearOfNextQuarter = firstMonthOfQuarter.getValue() > 9 ? now.getYear() + 1 : now.getYear();
|
|
|
+ return LocalDateTime.of(LocalDate.of(yearOfNextQuarter, firstMonthOfNextQuarter, 1), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下季度结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextQuarterEndTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
|
|
+ Month firstMonthOfNextQuarter = firstMonthOfQuarter.plus(5L);
|
|
|
+ int yearOfNextQuarter = firstMonthOfQuarter.getValue() > 9 ? now.getYear() + 1 : now.getYear();
|
|
|
+ return LocalDateTime.of(LocalDate.of(yearOfNextQuarter, firstMonthOfNextQuarter, firstMonthOfNextQuarter.maxLength()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上半年开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextHalfYearStartTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ int nextHalfYear = (now.getMonthValue() > 6) ? now.getYear() + 1 : now.getYear();
|
|
|
+ Month firstMonthOfNextHalfYear = (now.getMonthValue() > 6) ? Month.JANUARY : Month.JULY;
|
|
|
+ return LocalDateTime.of(LocalDate.of(nextHalfYear, firstMonthOfNextHalfYear, 1), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上半年结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextHalfYearEndTime() {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ int lastHalfYear = (now.getMonthValue() > 6) ? now.getYear() + 1 : now.getYear();
|
|
|
+ Month lastMonthOfNextHalfYear = (now.getMonthValue() > 6) ? Month.JUNE : Month.DECEMBER;
|
|
|
+ return LocalDateTime.of(LocalDate.of(lastHalfYear, lastMonthOfNextHalfYear, lastMonthOfNextHalfYear.maxLength()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下一年开始时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextYearStartTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下一年结束时间
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime nextYearEndTime() {
|
|
|
+ return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|