JAVA_获取每年、每季度的第一天,最后一天_一蓑烟雨任平生

啪啪啪的写了一大堆,具体写的啥我也没看懂

记录一下吧,下次没准用到了翻翻自己的博客

程序员的逻辑:一步一个脚印,走完发现感觉不像自己走的

代码量很多,过程很复杂,思路很清晰,可能大佬有更简单的方法

废话不多说了,直接上代码

工具类
 /**
     * 用途:以指定的格式格式化日期字符串
     *
     * @param pattern     字符串的格式
     * @param currentDate 被格式化日期
     * @return String 已格式化的日期字符串
     * @throws NullPointerException 如果参数为空
     */
    public String formatDate(Date currentDate, String pattern) {
        if (currentDate == null || "".equals(pattern) || pattern == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(currentDate);
    }

    public String[] getCurrQuarter(int num) {
        String[] s = new String[2];
        String str = "";
        // 设置本年的季
        Calendar quarterCalendar = null;
        switch (num) {
            case 1: // 本年到现在经过了一个季度,在加上前4个季度
                quarterCalendar = Calendar.getInstance();
                quarterCalendar.set(Calendar.MONTH, 3);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "01-01";
                s[1] = str;
                break;
            case 2: // 本年到现在经过了二个季度,在加上前三个季度
                quarterCalendar = Calendar.getInstance();
                quarterCalendar.set(Calendar.MONTH, 6);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "04-01";
                s[1] = str;
                break;
            case 3:// 本年到现在经过了三个季度,在加上前二个季度
                quarterCalendar = Calendar.getInstance();
                quarterCalendar.set(Calendar.MONTH, 9);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "07-01";
                s[1] = str;
                break;
            case 4:// 本年到现在经过了四个季度,在加上前一个季度
             quarterCalendar = Calendar.getInstance();
                quarterCalendar.add(Calendar.YEAR, -1);
                quarterCalendar.set(Calendar.MONTH, 12);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "10-01";
                s[1] = str;
                break;
        }
        return s;
    }

    /**
     * 获取某年第一天日期
     *
     * @param year 年份
     * @return Date
     */
    public Date getYearFirst(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date currYearFirst = calendar.getTime();
        return currYearFirst;
    }

    /**
     * 获取某年最后一天日期
     *
     * @param year 年份
     * @return Date
     */
    public Date getYearLast(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.roll(Calendar.DAY_OF_YEAR, -1);
        Date currYearLast = calendar.getTime();

        return currYearLast;
    }
获取开始结束日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        Date startTime = null;
        Date endTime = null;
        //获取年
        int year = cal.get(Calendar.YEAR);
        //获取当前月
        int month = cal.get(Calendar.MONTH) + 1;
        try {
            if (assessPeriod.equals("季度")) {
                if (month == 1 || month == 2 || month == 3) {
                    String[] quarter = DateUtils.getCurrQuarter(4);
                    startTime = sdf.parse(quarter[0]);
                    endTime = sdf.parse(quarter[1]);
                } else if (month == 4 || month == 5 || month == 6) {
                    String[] quarter = DateUtils.getCurrQuarter(1);
                    startTime = sdf.parse(quarter[0]);
                    endTime = sdf.parse(quarter[1]);
                } else if (month == 7 || month == 8 || month == 9) {
                    String[] quarter = DateUtils.getCurrQuarter(2);
                    startTime = sdf.parse(quarter[0]);
                    endTime = sdf.parse(quarter[1]);
                } else {
                    String[] quarter = DateUtils.getCurrQuarter(3);
                    startTime = sdf.parse(quarter[0]);
                    endTime = sdf.parse(quarter[1]);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (assessPeriod.equals("半年")) {
            try {
                //获取月份
                if (month > 6) {
                    //获取上半年的第一天
                    startTime = DateUtils.getYearFirst(year);
                    endTime = sdf.parse((year) + "-06-30");
                } else {
                    //获取去年下半年的起始日期
                    startTime = sdf.parse((year - 1) + "-06-30");
                    endTime = DateUtils.getYearLast(year - 1);
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        if (assessPeriod.equals("一年")) {
            //获取上一周期年的第一天
            startTime = DateUtils.getYearFirst(year - 1);
            //获取上一周期年的最后一天
            endTime = DateUtils.getYearLast(year - 1);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值