Get first next Monday after certain date?

calendar, date, java

Solution

Java 8+

LocalDate ld = LocalDate.of(2014, Month.JUNE, 12);
System.out.println(ld);
ld = ld.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println(ld);

Which prints...

2014-06-12
2014-06-16

Because it's possible that the date my actually be a Monday, you could also use...

ld = ld.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));

Java <= 7

You should be using the ThreeTen Backport, which gives you the support of the Java 8 Date/Time API

Original Answer

Instead of `System.out.println(date1);` use `System.out.println(date1.getTime());`

`getTime` returns an instance of `Date` which represents the current state of the `Calendar`

Which will output `Mon Jul 14 00:00:00 EST 2014`

`System.out.println(date1)` is the equivlent of using `System.out.println(date1.toString())`, which, in this case, is dumping a bunch of useful info about the state of the `Calendar` object, but not really human readable data.

`System.out.println(date1.getTime())` will use the `Date`'s to `toString` method to display a date value, formatted based on the current local settings, which will provide more useful information.

Updated

Instead of using `GregorianCalendar`, you should use the system `Calendar`, for example...

Calendar date1 = Calendar.getInstance();
date1.set(2014, 06, 12);

Also, months are `0` indexed, meaning that Janurary is actually `0` not `1`, so in your example, you've specified the month as July, not June.

So, instead, using...

Calendar date1 = Calendar.getInstance();
date1.set(2014, 05, 12);

while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
    date1.add(Calendar.DATE, 1);
}

System.out.println(date1.getTime());

Which outputted...

Mon Jun 16 16:22:26 EST 2014

Which is next Monday from today...more or less ;)

Problem

I know there is the same question here, but I have tried the answer provided and it returned an output that I don't understand. I am confused by the answer and I don't think the output is correct. I need help, thank you :) ``` GregorianCalendar date1 = new GregorianCalendar( 2014, 05, 12 ); //05 is june as month start from 0 -11 while( date1.get( Calendar.DAY_OF_WEEK ) != Calendar.MONDAY ) date1.add( Calendar.DATE, 1 ); System.out.println(date1); ``` Here is the output: ``` java.util.GregorianCalendar[time=1405267200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Singapore",offset=28800000,dstSavings=0,useDaylight=false,transitions=9,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=6,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=14,DAY_OF_YEAR=195,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=28800000,DST_OFFSET=0] ``` Where on the output should I extract to retrieve Monday's date?

Original source

Related problems