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

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

7个回答

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()));
}
}

qq_27232757
圣龙LKX 你得用SimpleDateFormat来把String类型的日期装换成Date类型的日期,再用Calendar
2 年多之前 回复

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

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

baidu_35456782
奋斗的殇鹿 回复圣龙LKX: 我现在就是用的这个类
2 年多之前 回复
baidu_35456782
奋斗的殇鹿 回复圣龙LKX: 额。。。我这个是动态数据,应该用JAVA更准确点吧,只不过JAVA我不会写
2 年多之前 回复
qq_27232757
圣龙LKX 回复奋斗的殇鹿: 建议你用Calendar这个类,对日期的操作简化了很多。
2 年多之前 回复
qq_27232757
圣龙LKX 回复奋斗的殇鹿: 用JAVA写的话可能麻烦一点。
2 年多之前 回复
qq_27232757
圣龙LKX 回复奋斗的殇鹿: 在数据库里面查询,有方法可以用。
2 年多之前 回复
baidu_35456782
奋斗的殇鹿 用SQL会更简单些么?
2 年多之前 回复
baidu_35456782
奋斗的殇鹿 我是用JAVA写代码
2 年多之前 回复

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

qq_31307253
360编码 回复奋斗的殇鹿: 慢慢来,先学习日期函数,将字符串转化为日期类型,打印输出,在转化long类型值,都是一步一步来的
2 年多之前 回复
qq_31307253
360编码 回复奋斗的殇鹿: 呵呵,感觉你的手好新啊
2 年多之前 回复
m0_37708325
矿物质的水 额额额,直说要代码就完事了,整的我以为说了思路你差不多会了,尴尬。中午的吧,去吃饭了
2 年多之前 回复
m0_37708325
矿物质的水 回复m0_37708325: String format="yyyy-MM-dd 00:00:00"; Date time=DateUtil.stringToDate("你想要书的天数", format); //你想要月份的毫秒值 long nowTime=time.getTime(); //当前时间的毫秒值 long oldTime=System.currentTimeMillis();
2 年多之前 回复
baidu_35456782
奋斗的殇鹿 回复m0_37708325: 哥,能贴点代码么?我是新手。。。。
2 年多之前 回复
baidu_35456782
奋斗的殇鹿 回复m0_37708325: 额。。。。不是很清楚
2 年多之前 回复
m0_37708325
矿物质的水 回复m0_37708325: 获取的季度都是这套路
2 年多之前 回复
m0_37708325
矿物质的水 回复奋斗的殇鹿: 用正则表达式写出对应的天数 格式yyyy-MM-dd 00:00:00 然后放到Date中获取毫秒值
2 年多之前 回复
baidu_35456782
奋斗的殇鹿 我都不知道怎么开始。。
2 年多之前 回复
baidu_35456782
奋斗的殇鹿 哥,我就是不知道改怎么获取出相对应的季度噻
2 年多之前 回复
另外,一点,假如是同一年的两个日期,季度差是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());

}

}

具体的逻辑看你的需求

baidu_35456782
奋斗的殇鹿 下面最新的评论就是我的代码
2 年多之前 回复
baidu_35456782
奋斗的殇鹿 我在网上查了些资料。。。最后我自己写了出来,但是我不知道这样会不会有问题,你能帮我看看么?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!