2009-11-26 4 views
7

Я знаю, как создать массив строк или чисел, но как один создать массив дат:/массив дат в Java

+1

Вы можете написать некоторый псевдокод того, что вы хотите. Возможно, Date [] = new Date [] {'2009-01-01', '2009-02-01'}, таким образом, мы можем лучше ответить на этот вопрос. –

ответ

21

таким же образом, что вы делаете для струнных и Int, вы просто разместить различные типы внутри:

Date [] dates = { 
    new Date(), 
    new Date() 
}; 

Объявлен массив размера два с двумя датами.

Вы также можете инициализировать с нулевыми значениями:

Date [] dates = new Date[2]; 

Или добавить более значимые ценности:

Date [] dates = { 
    getDateFromString("25/11/2009"), 
    getDateFromString("24/12/2009") 
}; 

.... 
public Date getDateFromString(String s) { 
    Date result = ...// parse the string set the value etc. 
    return result; 
} 

EDIT

... но в любом случае вы можете закончить то, что вы делали в методе getDateFromString?

Несомненно, я не изначально, потому что я хотел показать, что вы можете поместить все, что имеет тип «Дата».

Вы просто должны использовать SimpleDateFormate.parse() метод (унаследованный от DateFormat класса)

simpleDateFormatInstance.parse("24/12/2009"); // returns christmas 2009. 

Вот полный рабочий пример:

import java.text.SimpleDateFormat; 
import java.text.ParseException; 
import java.util.Date; 
import static java.lang.System.out; 

public class DateArrayTest { 

    private static final SimpleDateFormat dateFormat 
        = new SimpleDateFormat("dd/MM/yyyy"); 
    private static final Date invalidDate = new Date(0); 


    // test creating a date from a string. 
    public static void main(String [] args) { 
     Date [] randomDates = { 
      fromString("01/01/2010"), // new year 
      fromString("16/09/2010"), // 200 yrs Mex indepence 
      fromString("21/03/2010"), // uhhmm next spring? 
      fromString("this/should/fail"), // invalid date. 
     }; 

     for(Date date: randomDates) { 
      print(date); 
     } 
    } 

    /** 
    * Creates a date from the given string spec. 
    * The date format must be dd/MM/yyyy ie. 
    * 24 december 2009 would be: 24/12/2009 
    * @return invalidDate if the format is invalid. 
    */ 
    private static final Date fromString(String spec) { 
     try { 
      return dateFormat.parse(spec); 
     } catch(ParseException dfe) { 
      return invalidDate; 
     } 
    } 
    private static final void print(Date date) { 
     if(date == invalidDate) { 
      out.println("Invalid date"); 
     } else { 
      out.println(dateFormat.format(date)); 
     } 
    } 
} 
+0

Мне нравится последнее направление. я получаю Date [] часть ... но все равно вы можете закончить то, что вы делали в методе getDateFromString? – Madison

+0

спасибо большое, это помогло. – Madison

4

вы можете использовать массив java.util.Date (API Docs являются here)

Date[] dates = new Date[] { 
    new Date(), 
    new Date(), 
}; 

Вы можете создать ели массив любого типа объекта в Java - все ссылки и примитивные типы

1

Или вы могли бы использовать API и календарь класса Collections,

import java.util.*; 

List<Calendar> dates = new ArrayList<Calendar>(5); // initial size 
dates.add(Calendar.getInstance()); 
0

Вы можете рассмотреть (и это не реальность, но это своего рода), что примитивы - это что-то вроде этого (я добираюсь до реальности позже ... так что продолжайте читать):

int.7, int.42 (не компилируется), где int - класс (это не так), а 7 и 42 являются общедоступными статическими конечными переменными (они не являются).

и струнных являются чем-то вроде этого:.

Строка "Hello", String "Мир" (не компилируется), где строка является классом (это) и "Hello" и "мир". являются общедоступными статическими конечными переменными (они не являются).

Если моя фальшивка реальность была правда, что вы должны были бы иметь что-то вроде:

// again, won't compile. 
public class int 
{ 
    public static final int 7 = new int(7); 
    public static final int 42 = new int(42); 
    private final ??? data; 

    public int(??? val) 
    { 
     data = val; 
    } 
} 

и

// also will not compile 
public class String 
{ 
    public final String "Hello" = new String("Hello); 
    public final String "world" = new String("world); 
    private final ??? data; 

    public String(final ??? val) 
    { 
     data = val; 
    } 
} 

теперь вы сделать это массив, как (по-прежнему не компилируется):

int[] array = new int[] { int.7, int.42 }; 
String[] array = new String[] {String."Hello", String."world" }; 

В случае String моя альтернативная реальность была бы очень глупой, поскольку класс String не может быть kno w заранее каждую возможную String (для int это возможно).

Таким образом, мы получили бы избавиться от публичных статических конечных переменных в строку и сделать это вместо того, чтобы:

String[] array = new String[] { new String("Hello"), new String("world") }; 

Теперь к реальности:

Когда Java компилятор, когда он видит «Привет» или " world "он делает что-то похожее на" new String ("Hello") "- это немного умнее, так что если у вас есть" Hello "20 раз в файле, есть только одна копия (и некоторые другие вещи тоже).

Когда вы говорите:

new int[100]; you get an array of 100 ints all set to 0. 
new String[100]; you get an array of 100 Strings all pointing to null. 
new Data[100]; you get 100 Dates all pointing to null. 

Поскольку строка и дата из них указывают на нулевое значение необходимо выделить новый объект для каждого из них. Причина, по которой вам не нужно говорить «новый» со String, это то, что компилятор относится к нему специально. Причина, по которой вам не нужно говорить «new» с int, состоит в том, что это примитив, а не объект.

Итак, простой ответ на ваш вопрос, вы должны выделить новую дату для каждого элемента массива :-)

+1

: -o .... какой .. колени ... как ... – OscarRyz

+0

тоже аннотация? :-) – TofuBeer

1

вы имели в виду ввода массив dates.This коды поможет ..

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.Scanner; 

public class Datinput { 

    public static void main(String args[]) { 
     int n; 
     ArrayList<String> al = new ArrayList<String>(); 
     Scanner in = new Scanner(System.in); 
     n = in.nextInt(); 
     String da[] = new String[n]; 
     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
     sdf.setLenient(false); 
     Date date[] = new Date[n]; 
     in.nextLine(); 
     for (int i = 0; i < da.length; i++) { 
      da[i] = in.nextLine(); 
     } 
     for (int i = 0; i < da.length; i++) { 

      try { 
       date[i] = sdf.parse(da[i]); 
      } catch (ParseException e) { 

       e.printStackTrace(); 
      } 
     } 

     in.close(); 
    } 
} 
+0

Попробуйте это ...... :) –

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