2012-01-26 14 views
0

配列内の各月の数を数えるメソッドを作成しようとしています。私の配列には、MM/DD/YYYY形式の日付が含まれています。配列には、任意の日付から開始し、任意の日付で終了する日付を含めることができます。日付は古い順から順に並び、平日のみが含まれます。例えば各月のカウントを取得

アレイは2010年6月15日から2012年1月15日の日付を有する場合、それはの配列を返すだろうが: 1月= 1、2月= 1、マル= 1、4月= 1月= 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