baidu_35456782
奋斗的殇鹿
采纳率36.1%
2017-03-01 02:51

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

1
已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • baidu_35456782 奋斗的殇鹿 4年前

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

    点赞 评论 复制链接分享
  • zhangpan_soft zhangpan_soft 4年前

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

    点赞 1 评论 复制链接分享
  • qq_27232757 圣龙LKX 4年前

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

    }

    具体的逻辑看你的需求

    点赞 评论 复制链接分享
  • zhangpan_soft zhangpan_soft 4年前
    另外一定要是后一个日期所在季度-前一个日期所在季度,比如16年的7月,和18年的4月,前一个日期是在夏季,后一个是在春季,所以按月份季度差位1-2=-1,错2年就是-1+4*2=7
    
    点赞 评论 复制链接分享
  • zhangpan_soft zhangpan_soft 4年前
    另外,一点,假如是同一年的两个日期,季度差是0-3,如果季度跨一年就是(0-3)+4,跨n年就是(0-3)+n*4, 比如,16年的7月和18年的8月,因为按月份都是夏季,所以初步季度差为0,18年和16年相错2年,所以季度差为0+4*2=8,
    
    点赞 评论 复制链接分享
  • m0_37708325 矿物质的水 4年前

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

    点赞 评论 复制链接分享
  • qq_27232757 圣龙LKX 4年前

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

    点赞 评论 复制链接分享

相关推荐