用途
业务需要根据特定的标识获取时间戳范围,如今天、今年等。返回数组。
Label | value |
---|---|
今日 | dynamic_today |
昨日 | dynamic_yesterday |
明日 | dynamic_tomorrow |
本周 | dynamic_this_week |
上周 | dynamic_last_week |
下周 | dynamic_next_week |
本月 | dynamic_this_month |
上月 | dynamic_last_month |
下月 | dynamic_next_month |
本季度 | dynamic_this_quarter |
上季度 | dynamic_last_quarter |
下季度 | dynamic_next_quarter |
今年 | dynamic_this_year |
去年 | dynamic_last_year |
明年 | dynamic_next_year |
后端代码
import com.alibaba.fastjson.JSONArray;
import java.time.*;
import java.time.temporal.TemporalAdjusters;
public class CheckDynamicUtil {
public static JSONArray checkDynamic(String dynamic) {
ZoneId zoneId = ZoneId.systemDefault(); // 使用系统默认时区
LocalDateTime startDateTime;
LocalDateTime endDateTime;
LocalDate today = LocalDate.now(zoneId);
switch (dynamic) {
case "dynamic_today":
startDateTime = today.atStartOfDay();
endDateTime = today.atTime(23, 59, 59, 999999999);
break;
case "dynamic_yesterday":
LocalDate yesterday = today.minusDays(1);
startDateTime = yesterday.atStartOfDay();
endDateTime = yesterday.atTime(23, 59, 59, 999999999);
break;
case "dynamic_tomorrow":
LocalDate tomorrow = today.plusDays(1);
startDateTime = tomorrow.atStartOfDay();
endDateTime = tomorrow.atTime(23, 59, 59, 999999999);
break;
case "dynamic_this_week":
startDateTime = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).atStartOfDay();
endDateTime = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)).atTime(23,59,59,999999999);
break;
case "dynamic_last_week":
LocalDate lastWeek = today.minusWeeks(1);
startDateTime = lastWeek.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).atStartOfDay();
endDateTime = lastWeek.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)).atTime(23,59,59,999999999);
break;
case "dynamic_next_week":
LocalDate nextWeek = today.plusWeeks(1);
startDateTime = nextWeek.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).atStartOfDay();
endDateTime = nextWeek.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)).atTime(23,59,59,999999999);
break;
case "dynamic_this_month":
startDateTime = today.withDayOfMonth(1).atStartOfDay();
endDateTime = today.with(TemporalAdjusters.lastDayOfMonth()).atTime(23,59,59,999999999);
break;
case "dynamic_last_month":
LocalDate lastMonth = today.minusMonths(1);
startDateTime = lastMonth.withDayOfMonth(1).atStartOfDay();
endDateTime = lastMonth.with(TemporalAdjusters.lastDayOfMonth()).atTime(23,59,59,999999999);
break;
case "dynamic_next_month":
LocalDate nextMonth = today.plusMonths(1);
startDateTime = nextMonth.withDayOfMonth(1).atStartOfDay();
endDateTime = nextMonth.with(TemporalAdjusters.lastDayOfMonth()).atTime(23,59,59,999999999);
break;
case "dynamic_this_quarter":
int currentQuarter = (today.getMonthValue() - 1) / 3 + 1;
Month firstMonthOfQuarter = Month.of((currentQuarter - 1) * 3 + 1);
startDateTime = today.withMonth(firstMonthOfQuarter.getValue()).withDayOfMonth(1).atStartOfDay();
Month lastMonthOfQuarter = Month.of(currentQuarter * 3);
endDateTime = today.withMonth(lastMonthOfQuarter.getValue()).with(TemporalAdjusters.lastDayOfMonth()).atTime(23,59,59,999999999);
break;
case "dynamic_last_quarter":
int lastQuarter = (today.getMonthValue() - 1) / 3;
if (lastQuarter == 0) {
lastQuarter = 4;
today = today.minusYears(1);
}
Month firstMonthOfLastQuarter = Month.of((lastQuarter - 1) * 3 + 1);
startDateTime = today.withMonth(firstMonthOfLastQuarter.getValue()).withDayOfMonth(1).atStartOfDay();
Month lastMonthOfLastQuarter = Month.of(lastQuarter * 3);
endDateTime = today.withMonth(lastMonthOfLastQuarter.getValue()).with(TemporalAdjusters.lastDayOfMonth()).atTime(23,59,59,999999999);
break;
case "dynamic_next_quarter":
int nextQuarter = (today.getMonthValue() - 1) / 3 + 2;
if (nextQuarter > 4) {
nextQuarter = 1;
today = today.plusYears(1);
}
Month firstMonthOfNextQuarter = Month.of((nextQuarter - 1) * 3 + 1);
startDateTime = today.withMonth(firstMonthOfNextQuarter.getValue()).withDayOfMonth(1).atStartOfDay();
Month lastMonthOfNextQuarter = Month.of(nextQuarter * 3);
endDateTime = today.withMonth(lastMonthOfNextQuarter.getValue()).with(TemporalAdjusters.lastDayOfMonth()).atTime(23,59,59,999999999);
break;
case "dynamic_this_year":
startDateTime = today.withDayOfYear(1).atStartOfDay();
endDateTime = today.with(TemporalAdjusters.lastDayOfYear()).atTime(23,59,59,999999999);
break;
case "dynamic_last_year":
LocalDate lastYear = today.minusYears(1);
startDateTime = lastYear.withDayOfYear(1).atStartOfDay();
endDateTime = lastYear.with(TemporalAdjusters.lastDayOfYear()).atTime(23,59,59,999999999);
break;
case "dynamic_next_year":
LocalDate nextYear = today.plusYears(1);
startDateTime = nextYear.withDayOfYear(1).atStartOfDay();
endDateTime = nextYear.with(TemporalAdjusters.lastDayOfYear()).atTime(23,59,59,999999999);
break;
default:
throw new IllegalArgumentException("Invalid value: " + dynamic);
}
long startTimestamp = startDateTime.atZone(zoneId).toInstant().toEpochMilli();
long endTimestamp = endDateTime.atZone(zoneId).toInstant().toEpochMilli();
JSONArray array = new JSONArray();
array.add(startTimestamp);
array.add(endTimestamp);
return array;
}
}
打印结果
今日dynamic_today
2025-05-14 00:00:00
2025-05-14 23:59:59
[1747152000000,1747238399999]
##########
昨日dynamic_yesterday
2025-05-13 00:00:00
2025-05-13 23:59:59
[1747065600000,1747151999999]
##########
明日dynamic_tomorrow
2025-05-15 00:00:00
2025-05-15 23:59:59
[1747238400000,1747324799999]
##########
本周dynamic_this_week
2025-05-12 00:00:00
2025-05-18 23:59:59
[1746979200000,1747583999999]
##########
上周dynamic_last_week
2025-05-05 00:00:00
2025-05-11 23:59:59
[1746374400000,1746979199999]
##########
下周dynamic_next_week
2025-05-19 00:00:00
2025-05-25 23:59:59
[1747584000000,1748188799999]
##########
本月dynamic_this_month
2025-05-01 00:00:00
2025-05-31 23:59:59
[1746028800000,1748707199999]
##########
上月dynamic_last_month
2025-04-01 00:00:00
2025-04-30 23:59:59
[1743436800000,1746028799999]
##########
下月dynamic_next_month
2025-06-01 00:00:00
2025-06-30 23:59:59
[1748707200000,1751299199999]
##########
本季度dynamic_this_quarter
2025-04-01 00:00:00
2025-06-30 23:59:59
[1743436800000,1751299199999]
##########
上季度dynamic_last_quarter
2025-01-01 00:00:00
2025-03-31 23:59:59
[1735660800000,1743436799999]
##########
下季度dynamic_next_quarter
2025-07-01 00:00:00
2025-09-30 23:59:59
[1751299200000,1759247999999]
##########
今年dynamic_this_year
2025-01-01 00:00:00
2025-12-31 23:59:59
[1735660800000,1767196799999]
##########
去年dynamic_last_year
2024-01-01 00:00:00
2024-12-31 23:59:59
[1704038400000,1735660799999]
##########
明年dynamic_next_year
2026-01-01 00:00:00
2026-12-31 23:59:59
[1767196800000,1798732799999]
##########