Почему я не получаю ожидаемый день недели от установки этого объекта календаря?

Редактировать: Спасибо - теперь я понимаю это намного больше. Это очень запутанно, когда вы только начинаете! Спасибо за помощь. Я собираюсь оставить вопрос как есть (опасно получить больше отрицательных голосов), так как это может помочь другим. Есть некоторые другие библиотеки, которые, кажется, все рекомендуют для даты и времени.


Я борюсь с функцией календаря Java - похоже, она возвращает неправильные данные, нижняя цифра должна быть четвергом в соответствии с календарем, но возвращается как суббота!

Calendar cal = new GregorianCalendar();
       cal.set(2012,2,23); // 0 = January

      String weekdays[]={"sunday","monday", "tuesday", "wednesday","thursday","friday","saturday",};

        Integer Weekdaycurrent1=cal.get(Calendar.DAY_OF_WEEK);
        System.out.println("today is a "+weekdays[Weekdaycurrent1]); //Prints today is Saturday, when it should be a thursday

person UKDataGeek    schedule 14.05.2012    source источник
comment
Плохая идея предполагать, что класс, который был частью JDK с версии 1.0, неверен. Кто-нибудь нашел бы такой тривиальный баг много лет назад. Ты тот, кто неправ. Предположим, что проблема в вас, и вы добьетесь более быстрого прогресса.   -  person duffymo    schedule 14.05.2012
comment
Заголовок вашего поста звучит так, как будто вы нашли ошибку в Java, что, конечно же, не соответствует действительности. Попробуйте отредактировать свою тему и переименовать ее, какие из моих предположений относительно класса Calendar неверны или что-то подобное. Сделайте это, и я уверен, что отрицательные голоса исчезнут.   -  person Hovercraft Full Of Eels    schedule 14.05.2012
comment
Спасибо - теперь я понимаю это намного больше. Это очень запутанно, когда вы только начинаете! Спасибо за помощь. Я собираюсь поднять вопрос (в опасности большего количества отрицательных голосов), так как это может помочь другим   -  person UKDataGeek    schedule 01.07.2012


Ответы (2)


Для начала, DAY_OF_WEEK основано на 1:

public final static int SUNDAY = 1;

Во-вторых, 2012-03-23 (да, март, а не февраль), установленный cal.set(2012, 2, 23), был пятницей.

Ваш код работает правильно.

Отредактировано: для тех, кто слишком хромой, чтобы правильно прочитать вопрос, вызов cal.set(2012,2,23) устанавливает дату на 2012-03-23, потому что параметр month основан на нуле (т.е. январь = 0, февраль = 1, март = 2 и т. д.)

person Bohemian♦    schedule 14.05.2012
comment
@Jack Dude, cal.set(2012, 2, 23) устанавливает значение март, не февраль, потому что параметр месяца отсчитывается от нуля (январь = 0) - person Bohemian♦; 14.05.2012
comment
Здесь было некоторое совпадение между соглашением о человеческом месяце и соглашением о месяце Java;) Я действительно знаю, что оно основано на нуле, но когда я прочитал ваш ответ, я предположил, что ваш 2012-03-23 тоже был основан на нуле только потому, что я был ленив, извините за это ! - person Jack; 14.05.2012
comment
Спасибо за ответ. Просто кажется странной реализация календаря на java. Почему бы просто не сделать все на основе нуля или сделать все на основе 1. Не имеет смысла на самом деле. - person UKDataGeek; 14.05.2012

Неверное предположение с вашей стороны. Прочитайте javadocs:

http://docs.oracle.com/javase/1.4.2/docs/api/constant-values.html#java.util

public static final int SUNDAY          1
public static final int MONDAY          2
public static final int TUESDAY         3
public static final int WEDNESDAY       4
public static final int THURSDAY        5
public static final int FRIDAY          6
public static final int SATURDAY        7
person duffymo    schedule 14.05.2012