java 日期操作---获取当前日期前几个月份,年份,季度

package cn.com.thtf.sjpg2.utils;

import org.apache.http.util.TextUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DataUtils {
    /**
     * 得到当前日期的年份
     *
     * @return YYYY
     */
    public static String getCurrentDateOfYear() {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY");
        String times = sdf.format(date);
        return times;
    }
    /**
     * 判断月份属于哪个季度
     * @param date
     * @return
     */
    public static String judgeQuarter(String date){
        String[] strs = date.split("-");
        String result = strs[0] + "-";
        int month = Integer.parseInt(strs[1]);
        if(month >= 1 && month <= 3){
            result += "03";
        }
        if(month >= 4 && month <= 6){
            result += "06";
        }
        if(month >= 7 && month <= 9){
            result += "09";
        }
        if(month >= 10 && month <= 12){
            result += "12";
        }
        return result;
    }

    public static List<String> getBgq(String frequency,Integer count){
        List<String> dateList = new ArrayList<>();
        if("SS".equals(frequency)){
            // 创建 Calendar 对象并设置为当前时间
            Calendar calendar = Calendar.getInstance();
            // 获取当前年份、月份和日期
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH) + 1;
            int currentQuarter = (month - 1) / 3 + 1;
            // 输出前N个季度
            for (int i = 0; i < count; i++) {
                int previousQuarter = currentQuarter - i;
                int previousYear = year;

                if (previousQuarter <= 0) {
                    previousQuarter += 4;
                    previousYear--;
                }
                while (previousQuarter<=0){
                    previousQuarter += 4;
                    previousYear--;
                }
                dateList.add(previousYear+"0"+previousQuarter+"SS");
            }
        }else if("MM".equals(frequency)){
            Calendar calendar = Calendar.getInstance();
            // 月份最大为11 最小为0 所以设置初始月份时加1,需要获取到当前月份所以设置初始月份时需要加2
            calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 2);
            for (int i = 0; i < count; i++) {
                calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
                // 需要判断月份是否为0  如果0则需要转换成12,年份转为去年;,如果月份小于10,则前面加上0
                dateList.add(calendar.get(Calendar.MONTH) == 0 ?
                        calendar.get(Calendar.YEAR) - 1 + "" + 12+"MM" :
                        calendar.get(Calendar.YEAR) + "" + (calendar.get(Calendar.MONTH) < 10 ? "0" + calendar.get(Calendar.MONTH) : calendar.get(Calendar.MONTH)) +"MM");
            }
        }else if("YY".equals(frequency)){
            String currYear = getCurrentDateOfYear();
            if(!TextUtils.isEmpty(currYear)){
                int currYear_int = Integer.parseInt(currYear);
                dateList.add(currYear_int+"01YY");
                for (int i = 0;i < count-1 ;i++){
                    currYear_int--;
                    dateList.add(currYear_int+"01YY");
                }
            }

        }
        return dateList;
    }
    /*
     * 自现在 多少月份 多少年 多少季度
     * */
    public static List<String> getThisYearBgq(String frequency){
        List<String> dateList = new ArrayList<>();
        if("SS".equals(frequency)){
            // 创建 Calendar 对象并设置为当前时间
            Calendar calendar = Calendar.getInstance();
            // 获取当前年份、月份和日期
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH) + 1;
            int currentQuarter = (month - 1) / 3 + 1;
            // 输出前N个季度
            for (int i = 0; i < currentQuarter; i++) {
                int previousQuarter = currentQuarter - i;
                int previousYear = year;

                if (previousQuarter <= 0) {
                   break;
                }
                dateList.add(previousYear+"0"+previousQuarter+"SS");
            }
        }else if("MM".equals(frequency)){
            Calendar calendar = Calendar.getInstance();
            // 月份最大为11 最小为0 所以设置初始月份时加1,需要获取到当前月份所以设置初始月份时需要加2
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH) + 1;
            for (int i = 0; i < month; i++) {
                 int curMonth = month-i;
                // 需要判断月份是否为0  如果0则需要转换成12,年份转为去年;,如果月份小于10,则前面加上0
                if(curMonth == 0){
                    break;
                }
                if(curMonth < 10){
                    dateList.add(year+"0"+curMonth+"MM");
                }else{
                    dateList.add(year+""+curMonth+"MM");
                }

            }
        }else if("YY".equals(frequency)){
            String currYear = getCurrentDateOfYear();
            if(!TextUtils.isEmpty(currYear)){
                int currYear_int = Integer.parseInt(currYear);
                dateList.add(currYear_int+"01YY");
            }

        }
        return dateList;
    }
/*
* 两个日期之间间隔 多少月份 多少年 多少季度
* */
    public static List<String> getBgqByTime(String frequency,String startTime,String endTime){
        List<String> dateList = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date1 = null;
        Date date2 = null;
        try {
            date1 = sdf.parse(endTime);
            date2 = sdf.parse(startTime);

        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        cal1.setTime(date1);
        cal2.setTime(date2);

        int yearDiff = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
        int monthDiff = yearDiff * 12 + cal1.get(Calendar.MONTH)+1 - cal2.get(Calendar.MONTH);
        int quarterDiff = monthDiff / 3 +2;
// 获取当前年份、月份和日期
        int year1 = cal1.get(Calendar.YEAR);
        int month1 = cal1.get(Calendar.MONTH) + 1;
        int currentQuarter1 = (month1 - 1) / 3 + 1;

        if("SS".equals(frequency)){
            for (int i = 0; i < quarterDiff; i++) {
               int previousQuarter =  currentQuarter1 -i;
                int previousYear = year1;

                if (previousQuarter <= 0) {
                    previousQuarter += 4;
                    previousYear--;
                }
                while (previousQuarter<=0){
                    previousQuarter += 4;
                    previousYear--;
                }
                dateList.add(previousYear+"0"+previousQuarter+"SS");
            }
        }else if("MM".equals(frequency)){
            for (int i = 0; i < monthDiff; i++) {
                int curMonth = month1-i;
                int previousYear = year1;
                // 需要判断月份是否为0  如果0则需要转换成12,年份转为去年;,如果月份小于10,则前面加上0
                if(curMonth<=0){
                    curMonth +=12;
                    previousYear--;
                }
                while (curMonth<=0){
                    curMonth += 12;
                    previousYear--;
                }
                if(curMonth < 10){
                    dateList.add(previousYear+"0"+curMonth+"MM");
                }else{
                    dateList.add(previousYear+""+curMonth+"MM");
                }
            }
        }else if("YY".equals(frequency)){
            for (int i = 0; i <= yearDiff; i++) {
                int previousYear = year1 -i;
                dateList.add(previousYear+"01YY");
            }
        }
        return dateList;
    }
}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T'烂笔头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值