得到每个月的数量

时间:2012-01-26 19:38:44

标签: java arrays

我正在尝试创建一个方法来计算数组中每个完整月份的数量。我的数组包含MM / dd / yyyy格式的日期。该数组可以包含从任何日期开始到任何日期结束的日期。日期按从最旧到最新的顺序排列,仅包含工作日。

例如,如果数组的日期为2010年6月15日至2012年1月15日,则会返回以下数组: jan = 1,feb = 1,mar = 1,apr = 1,may = 1,jun = 1,jul = 2,aug = 2,sep = 2,oct = 2,nov = 2,dec = 2

我希望有人可以给我一些提示,这是我到目前为止所做的:

double[] months = new double[12];

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat yyyy = new SimpleDateFormat("yyyy");

for(int ii = 0 ; ii < array.length-length ; ii++){

        date = (Date)formatter.parse(array[ii][0]);
        String currentDateMY = sdf.format(date);
        String currentDateYYYY = yyyy.format(date);

        date = (Date)formatter.parse(array[ii+1][0]);
        String nextDateMY = sdf.format(date);

            if (!currentDateMY.equals(nextDateMY)){

                date = (Date)formatter.parse(array[ii][0]);
                sdf = new SimpleDateFormat("MM");
                String currentDateM = sdf.format(date);

                if (currentDateM.equals("01")) months[0] = jan++;
                if (currentDateM.equals("02")) months[1] = feb++;
                if (currentDateM.equals("03")) months[2] = mar++;
                if (currentDateM.equals("04")) months[3] = apr++;
                if (currentDateM.equals("05")) months[4] = may++;
                if (currentDateM.equals("06")) months[5] = jun++;
                if (currentDateM.equals("07")) months[6] = jul++;
                if (currentDateM.equals("08")) months[7] = aug++;
                if (currentDateM.equals("09")) months[8] = sep++;
                if (currentDateM.equals("10")) months[9] = oct++;
                if (currentDateM.equals("11")) months[10] = nov++;
                if (currentDateM.equals("12")) months[11] = dec++;
            }
}

1 个答案:

答案 0 :(得分:1)

做坏死的方式:

  1. 使用开始日期和结束日期创建GregorianCalendar。 (在开始的day_of_month中输入1,为结束日期的起始day_of_month输入GregorianCalendar.getActualMaximum(DAY_OF_MONTH)
  2. 继续在开始日期(GregorianCalendar.add(MONTH, 1))添加一个月,并检查是否after()结束日期。如果没有,请增加该月份的计数器。
  3. 如果实际开始日期的day_of_month组件为1,并且实际结束日期的day_of_month等于GregorianCalendar.getActualMaximum(DAY_OF_MONTH),则每个开始和结束都添加1。
  4. 如果开始日是星期一,并且您想要包括前一个周末,则可以对其进行检查(类似于结束日期为星期五)。

    更聪明的方法:

    获取日期之间的年份差异。每个月增加差异-2,如果它确实更大。然后检查开始月份是在结束月份之前还是之后,并相应地增加它们之间的月份。检查开始和结束月份本身是否包括在内。