java新手求教,各位大神帮帮忙。。。小弟在线等。。。

我的问题是:
像2017-03-01 到 2017-09-01 这两个日期之间想差了多少个季度,再得出每个季度的第一天和最后一天 这怎么搞,我搞了好久都没搞出来

String start = satrdate.substring(5,7);
int st = Integer.parseInt(start);
String end = enddate.substring(5,7);
int ed = Integer.parseInt(end);
int sm = 0;
int lm = 0;
if(st >= 2 && st < 5){
sm = 1;
}else if(st >= 5 && st < 8){
sm = 2;
}else if(st >= 8 && st < 11){
sm = 3;
}else{
sm = 4;
}
if(ed >= 2 && ed < 5){
lm = 1;
}else if(ed >= 5 && ed < 8){
lm = 2;
}else if(ed >= 8 && ed < 11){
lm = 3;
}else{
lm = 4;
}
int sum =lm-sm;
int mon = 0;
// throw new IllegalDataException("结束月份="+ed+" 开始月份="+st+" 季度差="+sum);
for(int i=0;i<=sum;i++){
if(i > 0){
mon = mon + 3;
}
Calendar calendar = Calendar.getInstance();
if(i == 0){
calendar.setTime(startdate);

int month = getQuarterInMonth(calendar.get(startdate.getMonth()), true);

calendar.set(Calendar.MONTH, month);

calendar.set(Calendar.DAY_OF_MONTH, 1);
GlobalVariable.log.debug("当季度的第一天:" + sf.format(calendar.getTime()));
// System.out.println("当季度的第一天:" + sf.format(calendar.getTime()));

// // 季度末

calendar.setTime(startdate);

month = getQuarterInMonth(calendar.get(startdate.getMonth()), false);

calendar.set(Calendar.MONTH, month + 1);

calendar.set(Calendar.DAY_OF_MONTH, 0);

GlobalVariable.log.debug("当前时间的季度末:" + sf.format(calendar.getTime()));
}else{
// 季度初

calendar.setTime(startdate);

int month = getQuarterInMonth(calendar.get(startdate.getMonth()), true);

calendar.set(Calendar.MONTH, month+mon);

calendar.set(Calendar.DAY_OF_MONTH, 1);
GlobalVariable.log.debug("当季度的第一天:" + sf.format(calendar.getTime()));
// System.out.println("当季度的第一天:" + sf.format(calendar.getTime()));

// // 季度末

calendar.setTime(startdate);

month = getQuarterInMonth(calendar.get(startdate.getMonth()), false);

calendar.set(Calendar.MONTH, month + 1+mon);

calendar.set(Calendar.DAY_OF_MONTH, 0);

GlobalVariable.log.debug("当前时间的季度末:" + sf.format(calendar.getTime()));
// System.out.println("当前时间的季度末:" + sf.format(calendar.getTime()));
}
}

你是用SQL查询还是JAVA写代码啊?

先给你一个思路:你去做做
1.日期用SimpleDateFormat 进行设置
2.获得季度的时候注意不带天数,以默认的毫秒值获取中间的差数,放入一个long[]中
3.获得季度相差的每一个第一天和最后一天,将你获得的long数组放到SimpleDateFormat 中分别遍历
(其中注意的是获得第一天1号是不变的,最后一天是可变的,用你获得的那个(月数+1)然后(天数-1)获得上月天数的最后一天)

阳历的季度划分是这样的,春:345,夏678,秋9,10,11,冬:12,1,2,所以计算季度之差,首先得判断出两个日期分别属于哪个段,另外要分出哪个日期在前面,比如16年的7月和17年的8月的差别,和16年的7月16年的8月的差别是不一样的,如果是春夏秋则每个季度的第一天和最后一天是固定不变的,唯一有可能变化的是冬季,冬季的第一天肯定也是不变的,变化的是最后一天,因为冬季的最后一个月是2月,2月有瑞年和平年之分,无外乎有两种可能,要么是28号,要么29号,所以判断当前冬季所在年是瑞年还是平年,如此就可以,这个就是整体思路,至于具体实现方法有很多种,但是思路都是这样的,你可以试试

另外,一点,假如是同一年的两个日期,季度差是0-3,如果季度跨一年就是(0-3)+4,跨n年就是(0-3)+n*4, 比如,16年的7月和18年的8月,因为按月份都是夏季,所以初步季度差为0,18年和16年相错2年,所以季度差为0+4*2=8,
另外一定要是后一个日期所在季度-前一个日期所在季度,比如16年的7月,和18年的4月,前一个日期是在夏季,后一个是在春季,所以按月份季度差位1-2=-1,错2年就是-1+4*2=7

package com.test;

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

public class Test {

public static void main(String[] args) throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date startTime = sdf.parse("2017-03-01");
    Date endTime = sdf.parse("2017-09-01");
    Calendar calendar1 = Calendar.getInstance();
    Calendar calendar2 = Calendar.getInstance();
    calendar1.setTime(startTime);
    calendar2.setTime(endTime);
    System.out.println(calendar2.get(Calendar.MONTH)-calendar1.get(Calendar.MONTH));
    calendar1.set(Calendar.DATE, 1);
    calendar1.add(Calendar.MONTH, 1);
    calendar1.add(Calendar.DATE, -1);
    System.out.println(calendar1.getTime());

}

}

具体的逻辑看你的需求