Getting last Day of Month XY with Calendar Java

I need to get the last date of a given month, in my case I need to get the last Date of June. My code is following:

cal.set(Calendar.DAY_OF_MONTH,
            Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH));
    int month = cal.get(Calendar.MONTH) + 1;

    if (month <= 6) {
        cal.set(Calendar.DAY_OF_YEAR, Calendar.getInstance()
                .getActualMaximum(Calendar.JUNE));
        return (Calendar) cal;
    } else {
        cal.set(Calendar.DAY_OF_YEAR, Calendar.getInstance()
                .getActualMaximum(Calendar.DAY_OF_YEAR));
        return (Calendar) cal;
    }

At first I get the actual month and wether it's the first half of the year or the second in need another date, always the last date of that half year. With the code above the return is

2015-01-31

and not 2015-06-31 as I thought it should be. How could I possibly fix this?

Jon Skeet
people
quotationmark

Your code is all over the place at the moment, unfortunately - you're creating new calendars multiple times for no obvious reason, and you're calling Calendar.getActualMaximum passing in the wrong kind of constant (a value rather than a field).

You want something like:

int month = cal.get(Calendar.MONTH) <= Calendar.JUNE
    ? Calendar.JUNE : Calendar.DECEMBER;
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calenday.DAY_OF_MONTH));
return cal;

However, I would strongly recommend using java.time if you're on Java 8, and Joda Time if you're not - both are much, much better APIs than java.util.Calendar.

people

See more on this question at Stackoverflow