JAVA时间戳工具类

用途

业务需要根据特定的标识获取时间戳范围,如今天、今年等。返回数组。

Labelvalue
今日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]
##########

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值