Java GregorianCalendar Что я делаю не так? Неправильное свидание? - PullRequest
6 голосов
/ 31 мая 2010

Здравствуйте, у меня проблема с GregorianCalendar.

Что там не так?

Каким будет результат 2010/6/1, а не 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));
    }

}

Ответы [ 3 ]

10 голосов
/ 31 мая 2010

Java считает месяцы с 0, поэтому 5 - июнь. Всегда безопаснее использовать константы. Поэтому я бы написал:

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

То же самое относится к распечатке вашего календаря. Если вы сделаете cal.get(Calendar.MONTH), вы получите 6, то есть ИЮЛЬ.

1 голос
/ 27 ноября 2011

В ответ на вышеприведенные ответы, поскольку в июне нет 31-го дня, календарь переводит его на следующий действительный день, поскольку Calendar.setLenient по умолчанию имеет значение true.

1 голос
/ 31 мая 2010

Это потому, что номер месяца начинается с нуля, поэтому вы пытаетесь установить 31 июня, а июнь - только 30 дней, поэтому он конвертируется в 1 июля.

...