Защо не получавам деня от седмицата, който очаквам от настройката на този календарен обект?

Редактиране: Благодаря - сега го разбирам много повече. Много е объркващо, когато започнете за първи път! Благодаря за помощта. Ще запазя въпроса такъв, какъвто е (с опасност от повече гласове против), тъй като може да помогне на другите. Има някои други библиотеки, които изглежда всеки препоръчва за дата и час


Имам затруднения с функцията на календара на 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, което разбира се не е вярно. Помислете дали да редактирате темата си и да я преименувате, кои от моите предположения по отношение на класа Календар са грешни или нещо подобно. Направете това и се обзалагам, че отрицателните гласове ще изчезнат.   -  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