Question

Hello I have a problem with GregorianCalendar.

What is wrong in there?

How outcome is 2010/6/1 and not 2010/05/31?

package test;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Main {

    public static void main(String[] args) {
        Calendar cal = new GregorianCalendar(2010, 5, 31);
        System.out.println(cal.get(Calendar.YEAR) + "/" + cal.get(Calendar.MONTH) + "/" + cal.get(Calendar.DAY_OF_MONTH));
    }

}
Was it helpful?

Solution

Java counts months from 0, so 5 is June. It's always safer to use the constants. So I would write:

Calendar cal = new GregorianCalendar(2010, Calendar.MAY, 31);

The same applies to your calendar print out. If you do cal.get(Calendar.MONTH) you get 6 meaning JULY.

OTHER TIPS

This is because month number is zero-based, so you are trying to set 31st of June, but June is only 30 days, so it gets converted to 1st of July.

Toadd to what the above answers, since there is no 31st day in June the Calendar promotes it to the next valid day because Calendar.setLenient is true by default.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top