From af103f3aa3cbdf67c5e8c8075fbd22c6a19aef9f Mon Sep 17 00:00:00 2001 From: Scott Date: Tue, 16 Jan 2024 19:21:35 +0800 Subject: [PATCH] (common)(fix):add quarter date period (#632) --- .../supersonic/common/util/DatePeriodEnum.java | 1 + .../tencent/supersonic/common/util/DateUtils.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/common/src/main/java/com/tencent/supersonic/common/util/DatePeriodEnum.java b/common/src/main/java/com/tencent/supersonic/common/util/DatePeriodEnum.java index a26733573..9879d5397 100644 --- a/common/src/main/java/com/tencent/supersonic/common/util/DatePeriodEnum.java +++ b/common/src/main/java/com/tencent/supersonic/common/util/DatePeriodEnum.java @@ -4,6 +4,7 @@ public enum DatePeriodEnum { DAY("日"), WEEK("周"), MONTH("月"), + QUARTER("季度"), YEAR("年"); private String chName; diff --git a/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java b/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java index 1335102bd..ca1c46e69 100644 --- a/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java +++ b/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java @@ -5,6 +5,8 @@ import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoField; +import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Calendar; @@ -91,6 +93,19 @@ public class DateUtils { result = result.with(TemporalAdjusters.firstDayOfMonth()); } break; + case QUARTER: + result = currentDate.minusMonths(intervalDay * 3L); + if (intervalDay == 0) { + TemporalAdjuster firstDayOfQuarter = temporal -> { + LocalDate tempDate = LocalDate.from(temporal); + int month = tempDate.get(ChronoField.MONTH_OF_YEAR); + int firstMonthOfQuarter = ((month - 1) / 3) * 3 + 1; + return tempDate.with(ChronoField.MONTH_OF_YEAR, firstMonthOfQuarter) + .with(TemporalAdjusters.firstDayOfMonth()); + }; + result = result.with(firstDayOfQuarter); + } + break; case YEAR: result = currentDate.minusYears(intervalDay); if (intervalDay == 0) {