怎样计算两个日期之间的季度数以及每个季度的最后一个月发

季度不考虑节气,如2016-01-01至2017-12-01共计8个季度,最后一个月为:2016-03、2016-06、2016-09、2016-12、2017-1…2017-12。结果满意会追加

比较啊,月份只要是3,6,9,12就是季度的最后一个月。
一年12个月,除以3商几,就是有几个季度。
我的回答,希望你满意。

楼主:开始时间如果是2016-03-31到2016-04-05 这样算一个季度还是两个季度?

用Case 1~12

 public static void main(String[] args) {
        int a=aa("2016-12-01", "2017-03-01");
        System.out.println(a);
    }
    public static int aa(String startdate,String enddate){
        int a =0;
        String[] ss= startdate.split("-");
        String[] ee= enddate.split("-");
        String sy =ss[0];
        String sm=ss[1];
        String ey=ee[0];
        String em = ee[1];
        int syi=Integer.parseInt(sy);
        int smi=Integer.parseInt(sm);
        int eyi=Integer.parseInt(ey);
        int emi=Integer.parseInt(em);
        a= ((eyi-syi)*12 +(emi-1))/3-(smi-1)/3+1;
        return a;
    }

不知道 符合你的要求吗

一年不是四个季度吗?

比较啊,月份只要是3,6,9,12就是季度的最后一个月。

取时间的年份,月份和日期然后逻辑比较就行了,例如17.5到18-2 ,5在3-6之间最后一个月为17.6,然后就是17.9 17.12 18.3

然后18.2<18.3就结束了,然后统计4个季度

我觉得你用日志 方法 比较好

1月份第一天到 3月份最后一天加1

private static final int MONTHS_OF_QUARTER = 3;

private static final String TIME_FORMATE_MONTH = "yyyy-MM";

public static void main(String[] args) {
    DateTime sTime = new DateTime("2015-12-01");
    DateTime eTime = new DateTime("2017-12-01");

    //月数总跨度(示例中一共24个月)
    int mounthNum = new Period(sTime,eTime, PeriodType.months()).getMonths()+1;
    List<String> quarterList = new ArrayList<String>();
    //开始月份(示例中为1)
    int sMonth = sTime.getMonthOfYear();
    //开始时间到第一个季尾剩余月数(示例中为1,即到3月还剩2个月)
    int leftMonth = (MONTHS_OF_QUARTER==MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER)?0:MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER));
    //得到第一个季尾月(示例中开始为1月,即第一个季尾为3月)
    DateTime quarterTail = sTime.plusMonths(leftMonth);
    for(int i=0;i<mounthNum;i=i+MONTHS_OF_QUARTER)
    {
        quarterList.add(new DateTime(quarterTail).toString(TIME_FORMATE_MONTH));
        quarterTail = quarterTail.plusMonths(MONTHS_OF_QUARTER);
    }

            //遍历,看下结果喽,list长度就是季度数
    for(String a:quarterList)
    {
        System.out.println(a);
    }
}

/**

  • @Description: description
  • @Date: 2017/12/6
  • @Author: xxx
    */
    public class QuarterUtil {

    private static final int MONTHS_OF_QUARTER = 3;

    private static final String TIME_FORMATE_MONTH = "yyyy-MM";

    private static List getQuarterTail(DateTime sTime,DateTime eTime)
    {
    int mounthNum = new Period(sTime,eTime, PeriodType.months()).getMonths()+1;
    List quarterList = new ArrayList();
    int sMonth = sTime.getMonthOfYear();
    int leftMonth = (MONTHS_OF_QUARTER==MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER)?0:MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER));
    DateTime quarterTail = sTime.plusMonths(leftMonth);
    for(int i=0;i<mounthNum;i=i+MONTHS_OF_QUARTER)
    {
    quarterList.add(new DateTime(quarterTail).toString(TIME_FORMATE_MONTH));
    quarterTail = quarterTail.plusMonths(MONTHS_OF_QUARTER);
    }
    return quarterList;
    }
    }

封装好了方法,楼主可以多了解下joda.DateTime,挺好用的

//求剩余月数leftMonth做一个简化,刚刚看昏了头
int leftMonth = (0==sMonth%MONTHS_OF_QUARTER)?0:MONTHS_OF_QUARTER-(sMonth%MONTHS_OF_QUARTER);

计算: 季度 = (0 == CurrentMoth % 3)? CurrentMoth / 3 : CurrentMoth / 3 + 1

取时间的年份,月份和日期然后逻辑比较就行了,例如17.5到18-2 ,5在3-6之间最后一个月为17.6,然后就是17.9 17.12 18.3然后18.2小于18.3就结束了,然后统计4个季度

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {
// 一天的毫秒数 60*60*1000*24
private final static long DAY_MILLIS = 86400000;

// 一小时的毫秒数 60*60*1000
private final static long HOUR_MILLIS = 3600000;

// 一分钟的毫秒数 60*1000
private final static long MINUTE_MILLIS = 60000;

//日期格式化串
private final static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

public static void main(String[] args) throws Exception{
    // 开始时间
    Date startdate = DATE_FORMAT.parse("2010-01-01 08:01:00");
    // 结束时间
    Date enddate = DATE_FORMAT.parse("2010-01-03 00:00:00");

    showTimedif(startdate, enddate);

    Calendar start = Calendar.getInstance();
    start.setTime(startdate);

    Calendar end = Calendar.getInstance();
    end.setTime(enddate);

    showTimedif(start, end);
}

public static void showTimedif(Date start, Date end) {       
    show(start.getTime(),end.getTime());
}

public static void showTimedif(Calendar start, Calendar end) {
    show(start.getTimeInMillis(),end.getTimeInMillis());
}

/**
 * 计算两个日期相差的天、小时、分钟
 * 
 * @param start
 * @param end
 */
public static void show(long start, long end) {
    long temp = end - start;
    System.out.print(DATE_FORMAT.format(new Date(start)) + " 与 " + DATE_FORMAT.format(new Date(end)));
    System.out.println("相差" + temp / DAY_MILLIS + "天" + 
            (temp % DAY_MILLIS)/ HOUR_MILLIS + "小时" + 
            ((temp % DAY_MILLIS) % HOUR_MILLIS)/ MINUTE_MILLIS + "分");
}

}