我的问题是:
像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());
}
}
具体的逻辑看你的需求