2012-01-26 5 views
0

Я пытаюсь создать метод, который подсчитывает количество каждого полного месяца в массиве. мой массив содержит даты в формате MM/dd/yyyy. Массив может содержать даты, начинающиеся с любой даты и заканчивающиеся в любую дату. Даты начинаются от самых старых до новейших и содержат только будние дни.получение количества каждого месяца

Например, если массив имеет даты от 6/15/2010 до 1/15/2012, он возвращает массив: 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++; 
      } 
} 
+4

Где вы застряли? Это домашнее задание? – Frankie

+0

Откуда вы знаете, какая дата - дата начала и какая дата - дата окончания вашего массива? Является ли это многомерным массивом? –

+0

Есть ли промежутки между датами, кроме как на выходных? – dasblinkenlight

ответ

1

Мозг-мертвый способ сделать это:

  1. Создать GregorianCale ndar с датой начала и окончания. (введите 1 для начала day_of_month и GregorianCalendar.getActualMaximum(DAY_OF_MONTH) для начала day_of_month на дату окончания)
  2. Продолжайте добавлять месяц к дате начала (GregorianCalendar.add(MONTH, 1)) и проверьте, не является ли оно after() конечной датой. Если нет, увеличьте счетчик этого месяца.
  3. Добавьте 1 для каждого начала и конца, если текущий день_о__компонентной составляющей начальной даты - 1, и если фактическая дата дня дня_о__о_о_о_о_о_о_с_1 равна GregorianCalendar.getActualMaximum(DAY_OF_MONTH).

Если начальный день является понедельником, и вы хотите включить предыдущий уик-энд, вы можете ввести чеки для него (аналогично для даты окончания - пятница).

Умнее способ сделать это:

Получить разницу в период между датами. Увеличивайте каждый месяц разницу-2, если она действительно больше. Затем проверьте, есть ли начальный месяц до или после конечного месяца, и увеличивайте между ними соответственно. Проверьте, включены ли начальные и конечные месяцы, как указано выше.

+0

Да, вы всегда должны искать уже готовые классы, чтобы вам не пришлось изобретать колесо. Специально для новичка. – Jimmt

Смежные вопросы