2012-01-26 71 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