Java:获取当前日期当前季度、上一季度开始结束日期时间

获取当前时间的所在季度开始结束日期

/**
     * 计算某日期所在季度开始日期
     * 季度划分:1、2、3, 4、5、6, 7、8、9, 10、11、12
     */
    public static Date getSeasonEndDate (Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int month = calendar.get(Calendar.MONTH);
        calendar.set(Calendar.MONTH, (month + 3) / 3 * 3);
        calendar.set(Calendar.DATE, 1);
        return new Date(calendar.getTime().getTime() - 24 * 60 * 60 *1000);
    }
    /**
     * 计算某日期所在季度结束日期
     * 季度划分:1、2、3, 4、5、6, 7、8、9, 10、11、12
     */
    public static Date getSeasonStartDate (Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int month = calendar.get(Calendar.MONTH);
        calendar.set(Calendar.MONTH, month / 3 * 3);
        calendar.set(Calendar.DATE, 1);
        return calendar.getTime();
    }

获取当前日期上一季度开始结束日期时间

  /**
     * 获取当前日期上一季度 开始时间
     *
     * @return
     */
    public static Date getStartQuarter(Date date) {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(date);
        startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3 - 1) * 3);
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMinTime(startCalendar);
        return startCalendar.getTime();
    }
   /**
     * 获取当前日期上一季度 结束时间
     *当前日期为31号存在bug已修复
     * @return
     */
    public static Date getLastQuarter(Date date) {


        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(date);
        int month = endCalendar.get(Calendar.MONTH);
        endCalendar.set(Calendar.MONTH, (month/ 3 - 1) * 3 + 3);
        endCalendar.set(Calendar.DATE, 1);
        return new Date(endCalendar.getTime().getTime() - 24 * 60 * 60 *1000);

    }



    /**
     * 最小时间
     *
     * @param calendar
     */
    private static void setMinTime(Calendar calendar) {
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
    }

    /**
     * 最大时间
     *
     * @param calendar
     */
    private static void setMaxTime(Calendar calendar) {
        calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
        calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
        calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
        calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));
    }

/**
*验证
**/
@Test
    public void test3(){
       
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            System.out.println("当前日期 :2022-12-31");
            System.out.println(" 获取当前日期上一季度 结束时间"+sdf.format(getLastQuarter(sdf.parse("2022-12-31"))));
            System.out.println(" 获取当前日期上一季度 开始时间"+sdf.format(getStartQuarter(sdf.parse("2022-12-31"))));
            System.out.println(" 获取当前日期所在季度 开始时间"+sdf.format(getSeasonStartDate(sdf.parse("2022-12-31"))));
            System.out.println(" 获取当前日期所在季度 结束时间"+sdf.format(getSeasonEndDate(sdf.parse("2022-12-31"))));

        } catch (ParseException e) {
            e.printStackTrace();
        }

       
    }

结果
Java:获取当前日期当前季度、上一季度开始结束日期时间_第1张图片
之前有存在31号bug情况,现在修复啦,感谢各位大佬指教~

你可能感兴趣的:(java,java,开发语言,后端)