Java时区国际化统一为东八区时间 使用localdate获取本周、上周、本月、上月、本季度、上季度、本年、去年工具类

 TimeZoneIdContext.setTimeZoneId(ZoneIdEnum.CST.getZoneIdName());
        System.out.println("今天开始时间:" + todayStartTimeCtt());
        System.out.println("今天结束时间:" + todayEndTimeCtt());
        System.out.println("昨天开始时间:" + yesterdayStartTimeCtt());
        System.out.println("昨天结束时间:" + yesterdayEndTimeCtt());
        System.out.println("最近7天开始时间:" + last7DaysStartTimeCtt());
        System.out.println("最近7天结束时间:" + last7DaysEndTimeCtt());
        System.out.println("最近30天开始时间:" + last30DaysStartTimeCtt());
        System.out.println("最近30天天结束时间:" + last30DaysEndTimeCtt());
        System.out.println("最近一年开始时间:" + last1YearStartTimeCtt());
        System.out.println("最近一年结束时间:" + last1YearEndTimeCtt());
        System.out.println("本周开始时间:" + weekStartTimeCtt());
        System.out.println("本周结束时间:" + weekEndTimeCtt());
        System.out.println("本月开始时间:" + monthStartTimeCtt());
        System.out.println("本月结束时间:" + monthEndTimeCtt());
        System.out.println("本季度开始时间:" + quarterStartTimeCtt());
        System.out.println("本季度结束时间:" + quarterEndTimeCtt());
        System.out.println("本半年开始时间:" + halfYearStartTimeCtt());
        System.out.println("本半年结束时间:" + halfYearEndTimeCtt());
        System.out.println("本年开始时间:" + yearStartTimeCtt());
        System.out.println("本年结束时间:" + yearEndTimeCtt());
        System.out.println("上周开始时间:" + lastWeekStartTimeCtt());
        System.out.println("上周结束时间:" + lastWeekEndTimeCtt());
        System.out.println("上月开始时间:" + lastMonthStartTimeCtt());
        System.out.println("上月结束时间:" + lastMonthEndTimeCtt());
        System.out.println("上季度开始时间:" + lastQuarterStartTimeCtt());
        System.out.println("上季度结束时间:" + lastQuarterEndTimeCtt());
        System.out.println("上半年开始时间:" + lastHalfYearStartTimeCtt());
        System.out.println("上半年结束时间:" + lastHalfYearEndTimeCtt());
        System.out.println("上一年开始时间:" + lastYearStartTimeCtt());
        System.out.println("上一年结束时间:" + lastYearEndTimeCtt());
        System.out.println("下周开始时间:" + nextWeekStartTimeCtt());
        System.out.println("下周结束时间:" + nextWeekEndTimeCtt());
        System.out.println("下月开始时间:" + nextMonthStartTimeCtt());
        System.out.println("下月结束时间:" + nextMonthEndTimeCtt());
        System.out.println("下季度开始时间:" + nextQuarterStartTimeCtt());
        System.out.println("下季度结束时间:" + nextQuarterEndTimeCtt());
        System.out.println("下半年开始时间:" + nextHalfYearStartTimeCtt());
        System.out.println("下半年结束时间:" + nextHalfYearEndTimeCtt());
        System.out.println("下一年开始时间:" + nextYearStartTimeCtt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("下一年结束时间:" + nextYearEndTimeCtt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;

/**
 * 获取请求时间转到东八区时间
 * @className TimeZoneCttLocalDateTimeUtils
 **/
public class TimeZoneCttLocalDateTimeUtils {
    
    /**
     * 请求参数时区
     * @return
     */
    private static ZoneId reqTimeZoneId(){
        String timeZone = StringUtilsPlus.defaultIfBlank(TimeZoneIdContext.getTimeZoneId().get(),ZoneId.systemDefault().getId());
        ZoneId zoneId = ZoneId.of(timeZone);
        return zoneId;
    }
    private static LocalDateTime localDateTimeCtt(LocalDateTime reqTimeZoneIdDateTime,String sourceTimeZone){
        return TimeZoneUtils.convertTimeZoneLocalDateTime(reqTimeZoneIdDateTime.format(DateTimeFormatter.ofPattern(
                GlobalConstants.YYYY_MM_DD_HH_MM_SS)),sourceTimeZone,ZoneIdEnum.CTT.getZoneIdName());
    }
    /**
     * 当前时间转东八区时间 亚洲上海时间
     *
     * @return
     */
    public static LocalDateTime nowCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.now(zoneId);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    
    /**
     * 今天开始时间
     *
     * @return
     */
    public static LocalDateTime todayStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 今天结束时间
     *
     * @return
     */
    public static LocalDateTime todayEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 昨天开始时间
     *
     * @return
     */
    public static LocalDateTime yesterdayStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime =LocalDateTime.of(LocalDate.now(zoneId).minus(1L, ChronoUnit.DAYS), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 昨天结束时间
     *
     * @return
     */
    public static LocalDateTime yesterdayEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).minus(1L, ChronoUnit.DAYS), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 最近7天开始时间
     *
     * @return
     */
    public static LocalDateTime last7DaysStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).minus(6L, ChronoUnit.DAYS), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 最近7天结束时间
     *
     * @return
     */
    public static LocalDateTime last7DaysEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime =  LocalDateTime.of(LocalDate.now(zoneId), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 最近30天开始时间
     *
     * @return
     */
    public static LocalDateTime last30DaysStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime =  LocalDateTime.of(LocalDate.now(zoneId).minus(29L, ChronoUnit.DAYS), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 最近30天结束时间
     *
     * @return
     */
    public static LocalDateTime last30DaysEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 最近一年开始时间
     *
     * @return
     */
    public static LocalDateTime last1YearStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).minus(1L, ChronoUnit.YEARS).plus(1L, ChronoUnit.DAYS), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 最近一年结束时间
     *
     * @return
     */
    public static LocalDateTime last1YearEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 本周开始时间
     *
     * @return
     */
    public static LocalDateTime weekStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(now.minusDays(now.getDayOfWeek().getValue() - 1), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    /**
     * 本周结束时间
     *
     * @return
     */
    public static LocalDateTime weekEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(now.plusDays(7 - now.getDayOfWeek().getValue()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
        
    }
    
    /**
     * 本月开始时间
     *
     * @return
     */
    public static LocalDateTime monthStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 本月结束时间
     *
     * @return
     */
    public static LocalDateTime monthEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 本季度开始时间
     *
     * @return
     */
    public static LocalDateTime quarterStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        Month month = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
        LocalDateTime reqTimeZoneIdDateTime =  LocalDateTime.of(LocalDate.of(now.getYear(), month, 1), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 本季度结束时间
     *
     * @return
     */
    public static LocalDateTime quarterEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        Month month = Month.of(now.getMonth().firstMonthOfQuarter().getValue()).plus(2L);
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.of(now.getYear(), month, month.length(now.isLeapYear())), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 本半年开始时间
     *
     * @return
     */
    public static LocalDateTime halfYearStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        Month month = (now.getMonthValue() > 6) ? Month.JULY : Month.JANUARY;
        LocalDateTime reqTimeZoneIdDateTime =  LocalDateTime.of(LocalDate.of(now.getYear(), month, 1), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 本半年结束时间
     *
     * @return
     */
    public static LocalDateTime halfYearEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        Month month = (now.getMonthValue() > 6) ? Month.DECEMBER : Month.JUNE;
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.of(now.getYear(), month, month.length(now.isLeapYear())), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 本年开始时间
     *
     * @return
     */
    public static LocalDateTime yearStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 本年结束时间
     *
     * @return
     */
    public static LocalDateTime yearEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上周开始时间
     *
     * @return
     */
    public static LocalDateTime lastWeekStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate lastWeek = LocalDate.now(zoneId).minus(1L, ChronoUnit.WEEKS);
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(lastWeek.minusDays(lastWeek.getDayOfWeek().getValue() - 1), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上周结束时间
     *
     * @return
     */
    public static LocalDateTime lastWeekEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate lastWeek = LocalDate.now(zoneId).minus(1L, ChronoUnit.WEEKS);
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(lastWeek.plusDays(7 - lastWeek.getDayOfWeek().getValue()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上月开始时间
     *
     * @return
     */
    public static LocalDateTime lastMonthStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).minus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上月结束时间
     *
     * @return
     */
    public static LocalDateTime lastMonthEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).minus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上季度开始时间
     *
     * @return
     */
    public static LocalDateTime lastQuarterStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
        Month firstMonthOfLastQuarter = firstMonthOfQuarter.minus(3L);
        int yearOfLastQuarter = firstMonthOfQuarter.getValue() < 4 ? now.getYear() - 1 : now.getYear();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.of(yearOfLastQuarter, firstMonthOfLastQuarter, 1), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上季度结束时间
     *
     * @return
     */
    public static LocalDateTime lastQuarterEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        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();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.of(yearOfLastQuarter, firstMonthOfLastQuarter, firstMonthOfLastQuarter.maxLength()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上半年开始时间
     *
     * @return
     */
    public static LocalDateTime lastHalfYearStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        int lastHalfYear = (now.getMonthValue() > 6) ? now.getYear() : now.getYear() - 1;
        Month firstMonthOfLastHalfYear = (now.getMonthValue() > 6) ? Month.JANUARY : Month.JULY;
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.of(lastHalfYear, firstMonthOfLastHalfYear, 1), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上半年结束时间
     *
     * @return
     */
    public static LocalDateTime lastHalfYearEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now();
        int lastHalfYear = (now.getMonthValue() > 6) ? now.getYear() : now.getYear() - 1;
        Month lastMonthOfLastHalfYear = (now.getMonthValue() > 6) ? Month.JUNE : Month.DECEMBER;
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.of(lastHalfYear, lastMonthOfLastHalfYear, lastMonthOfLastHalfYear.maxLength()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上一年开始时间
     *
     * @return
     */
    public static LocalDateTime lastYearStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).minus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 上一年结束时间
     *
     * @return
     */
    public static LocalDateTime lastYearEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).minus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下周开始时间
     *
     * @return
     */
    public static LocalDateTime nextWeekStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate nextWeek = LocalDate.now(zoneId).plus(1L, ChronoUnit.WEEKS);
        LocalDateTime reqTimeZoneIdDateTime =  LocalDateTime.of(nextWeek.minusDays(nextWeek.getDayOfWeek().getValue() - 1), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下周结束时间
     *
     * @return
     */
    public static LocalDateTime nextWeekEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate nextWeek = LocalDate.now(zoneId).plus(1L, ChronoUnit.WEEKS);
        LocalDateTime reqTimeZoneIdDateTime =   LocalDateTime.of(nextWeek.plusDays(7 - nextWeek.getDayOfWeek().getValue()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下月开始时间
     *
     * @return
     */
    public static LocalDateTime nextMonthStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime =  LocalDateTime.of(LocalDate.now(zoneId).plus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下月结束时间
     *
     * @return
     */
    public static LocalDateTime nextMonthEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime =  LocalDateTime.of(LocalDate.now(zoneId).plus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下季度开始时间
     *
     * @return
     */
    public static LocalDateTime nextQuarterStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
        Month firstMonthOfNextQuarter = firstMonthOfQuarter.plus(3L);
        int yearOfNextQuarter = firstMonthOfQuarter.getValue() > 9 ? now.getYear() + 1 : now.getYear();
        LocalDateTime reqTimeZoneIdDateTime =   LocalDateTime.of(LocalDate.of(yearOfNextQuarter, firstMonthOfNextQuarter, 1), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下季度结束时间
     *
     * @return
     */
    public static LocalDateTime nextQuarterEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
        Month firstMonthOfNextQuarter = firstMonthOfQuarter.plus(5L);
        int yearOfNextQuarter = firstMonthOfQuarter.getValue() > 9 ? now.getYear() + 1 : now.getYear();
        LocalDateTime reqTimeZoneIdDateTime =    LocalDateTime.of(LocalDate.of(yearOfNextQuarter, firstMonthOfNextQuarter, firstMonthOfNextQuarter.maxLength()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下半年开始时间
     *
     * @return
     */
    public static LocalDateTime nextHalfYearStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        int nextHalfYear = (now.getMonthValue() > 6) ? now.getYear() + 1 : now.getYear();
        Month firstMonthOfNextHalfYear = (now.getMonthValue() > 6) ? Month.JANUARY : Month.JULY;
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.of(nextHalfYear, firstMonthOfNextHalfYear, 1), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下半年结束时间
     *
     * @return
     */
    public static LocalDateTime nextHalfYearEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDate now = LocalDate.now(zoneId);
        int lastHalfYear = (now.getMonthValue() > 6) ? now.getYear() + 1 : now.getYear();
        Month lastMonthOfNextHalfYear = (now.getMonthValue() > 6) ? Month.JUNE : Month.DECEMBER;
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.of(lastHalfYear, lastMonthOfNextHalfYear, lastMonthOfNextHalfYear.maxLength()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下一年开始时间
     *
     * @return
     */
    public static LocalDateTime nextYearStartTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).plus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    /**
     * 下一年结束时间
     *
     * @return
     */
    public static LocalDateTime nextYearEndTimeCtt() {
        ZoneId zoneId = reqTimeZoneId();
        LocalDateTime reqTimeZoneIdDateTime = LocalDateTime.of(LocalDate.now(zoneId).plus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
        return localDateTimeCtt(reqTimeZoneIdDateTime,zoneId.getId());
    }
    
    public static void main(String[] args) {
        TimeZoneIdContext.setTimeZoneId(ZoneIdEnum.CST.getZoneIdName());
        System.out.println("今天开始时间:" + todayStartTimeCtt());
        System.out.println("今天结束时间:" + todayEndTimeCtt());
        System.out.println("昨天开始时间:" + yesterdayStartTimeCtt());
        System.out.println("昨天结束时间:" + yesterdayEndTimeCtt());
        System.out.println("最近7天开始时间:" + last7DaysStartTimeCtt());
        System.out.println("最近7天结束时间:" + last7DaysEndTimeCtt());
        System.out.println("最近30天开始时间:" + last30DaysStartTimeCtt());
        System.out.println("最近30天天结束时间:" + last30DaysEndTimeCtt());
        System.out.println("最近一年开始时间:" + last1YearStartTimeCtt());
        System.out.println("最近一年结束时间:" + last1YearEndTimeCtt());
        System.out.println("本周开始时间:" + weekStartTimeCtt());
        System.out.println("本周结束时间:" + weekEndTimeCtt());
        System.out.println("本月开始时间:" + monthStartTimeCtt());
        System.out.println("本月结束时间:" + monthEndTimeCtt());
        System.out.println("本季度开始时间:" + quarterStartTimeCtt());
        System.out.println("本季度结束时间:" + quarterEndTimeCtt());
        System.out.println("本半年开始时间:" + halfYearStartTimeCtt());
        System.out.println("本半年结束时间:" + halfYearEndTimeCtt());
        System.out.println("本年开始时间:" + yearStartTimeCtt());
        System.out.println("本年结束时间:" + yearEndTimeCtt());
        System.out.println("上周开始时间:" + lastWeekStartTimeCtt());
        System.out.println("上周结束时间:" + lastWeekEndTimeCtt());
        System.out.println("上月开始时间:" + lastMonthStartTimeCtt());
        System.out.println("上月结束时间:" + lastMonthEndTimeCtt());
        System.out.println("上季度开始时间:" + lastQuarterStartTimeCtt());
        System.out.println("上季度结束时间:" + lastQuarterEndTimeCtt());
        System.out.println("上半年开始时间:" + lastHalfYearStartTimeCtt());
        System.out.println("上半年结束时间:" + lastHalfYearEndTimeCtt());
        System.out.println("上一年开始时间:" + lastYearStartTimeCtt());
        System.out.println("上一年结束时间:" + lastYearEndTimeCtt());
        System.out.println("下周开始时间:" + nextWeekStartTimeCtt());
        System.out.println("下周结束时间:" + nextWeekEndTimeCtt());
        System.out.println("下月开始时间:" + nextMonthStartTimeCtt());
        System.out.println("下月结束时间:" + nextMonthEndTimeCtt());
        System.out.println("下季度开始时间:" + nextQuarterStartTimeCtt());
        System.out.println("下季度结束时间:" + nextQuarterEndTimeCtt());
        System.out.println("下半年开始时间:" + nextHalfYearStartTimeCtt());
        System.out.println("下半年结束时间:" + nextHalfYearEndTimeCtt());
        System.out.println("下一年开始时间:" + nextYearStartTimeCtt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println("下一年结束时间:" + nextYearEndTimeCtt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值