Массив дат в Java - PullRequest
       47

Массив дат в Java

7 голосов
/ 26 ноября 2009

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

Ответы [ 5 ]

21 голосов
/ 26 ноября 2009

Так же, как вы делаете для String и 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 ) );
        }
    }
}
4 голосов
/ 26 ноября 2009

Вы можете использовать массив java.util.Date (документы по API здесь )

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

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

1 голос
/ 07 февраля 2017

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

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();
    }
}
1 голос
/ 26 ноября 2009

Или вы можете использовать Collections API и класс Calendar,

import java.util.*;

List<Calendar> dates = new ArrayList<Calendar>(5); // initial size
dates.add( Calendar.getInstance() );
0 голосов
/ 26 ноября 2009

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

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

и эти строки примерно такие:

String. "Hello", String. "World" (не компилируется), где String является классом (он есть), а "Hello" и "world" являются открытыми статическими конечными переменными (они не являются).

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

// 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 не мог бы знать заранее каждую возможную строку (для int это возможно).

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

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

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

Когда компилятор Java, когда он видит "Hello" или "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 и Date указывают на null, вам необходимо выделить новый объект для каждого. Причиной того, что вам не нужно говорить «новое» со строкой, является то, что компилятор обрабатывает это специально. Причина, по которой вам не нужно говорить «новый» с int, заключается в том, что это примитив, а не объект.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...