2012-01-26 49 views
0

我正在尝试创建一个方法来计算数组中每个完整月份的数量。我的数组包含MM/dd/yyyy格式的日期。该数组可以包含从任何日期开始到任何日期结束的日期。日期按从最旧到最新的顺序排列,仅包含工作日。例如,如果数组的日期从2010年6月15日到2012年1月15日,它将返回一个数组:1 2 3 4 5 6 7 8 9 = 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++; 
      } 
} 
+4

你卡在哪里?这是功课吗? – Frankie

+0

你怎么知道哪个日期是开始日期,哪个日期是阵列上的结束日期?它是一个多维数组吗? –

+0

日期之间是否有差距,除了周末? – dasblinkenlight

回答

1

脑死亡方式:

  1. 创建GregorianCale ndar与开始日期和结束日期。 (起始日期的起始日期为1,起始日期的起始日期为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。

如果开始日期是星期一,并且您希望包括前一个周末,则可以对此进行检查(类似的结束日期是星期五)。

做的更聪明的办法:

获取日期之间的年差。如果实际上更大,则每月增加差值-2。然后检查开始月份是在结束月份之前还是之后,并相应地增加中间的月份。检查起始和结束月份是否包含在上面。

+0

是的,你应该总是寻找已经制作好的课程,所以你不必重新发明轮子。特别适合初学者。 – Jimmt