Skip to content
Advertisement

How can I output an arrraylist of dates?

I’m pretty new to java. My objective is to let a user input a date in “dd/MM/yyyy” format and for me to be able to add these dates to a calendar array list and then display the array with all the dates in it.

ArrayList<Calendar> dob = new ArrayList<Calendar>();

Calendar dobs = Calendar.getInstance();

//traveller dobs
for (int count = 0; count < tAmount; count++)
{   
    System.out.println("---Please write the dates in the following format dd/mm/yyyy--- ");
    System.out.println("Write dates in same order as names!- ");
    System.out.println("Day such as '09':");
    day = keyboard.nextInt();
    System.out.println("Month such as '11':");
    month = keyboard.nextInt();
    System.out.println("Year such as '1998':");
    year = keyboard.nextInt();
    
    //format & add to arraylist
    dobs.set(year, month, day);
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    df.format(dobs);
    dob.add(dobs);
};

System.out.println(id +"n"+ name+"n" + tAmount+"n" + travellers+"n" +dob+"n" + dateCreated);

I tried searching for answers here and elsewhere but I could not find what I was looking for and the threads I did look into just confused me further. Here is the output I get when I run this code:

Output

If I remove the date format stuff I get this: enter image description here

What I’m looking for is something like: [20-10-1999,12-03-1998,…]

I’m not really understanding how to properly use calendar and would appreciate any help.

Advertisement

Answer

tl;dr

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
List < LocalDate > dates =
        List
                .of( "23/01/2021" , "17/02/2021" )
                .stream()
                .map(
                        ( String s ) -> LocalDate.parse( s , formatter )
                )
                .toList();

System.out.println( "dates = " + dates );

[2021-01-23, 2021-02-17]

Details

Never use Date and SimpleDateFormat classes. These were years ago supplanted by the modern java.time classes defined in JSR 310.

List < String > inputs = List.of( "23/01/2021", "17/02/2021" ) ;
List< LocalDate > dates = new ArrayList<>( inputs.size() ) ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
for( String input : inputs )
{
    LocalDate date = LocalDate.parse( input , f ) ;
    dates.add( date ) ;
}

If you have the year, month, and day components as separate numbers, use another factory method.

LocalDate.of( y , m , d )

To display the LocalDate objects, let java.time automatically localize.

Locale locale = Locale.CANADA_FRENCH ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ).withLocale( locale) ;
for( LocalDate date : dates )
{
    String output = date.format( f ) ;
    …
}

Or you can write another custom format as seen in first code snippet, using DateTimeFormatter.ofPattern.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement