2015-01-19 5 views
0

Я написал код, который использует календарь Java и показывает DAY_OF_WEEK с меткой времени. Но календарь по умолчанию начинается с воскресенья (1). Я хочу, чтобы это началось с понедельника, например. Он должен вернуть 1 в понедельник. Вот мой код:Как создать календарь java для запуска буднего дня с понедельника?

Calender c = Calender.getInstance(TimeZone.getInstance("Australia/Sydney")); 
c.setTimeInMillis(1413831601032L); 
c.setFirstDayOfWeek(Calender.Monday); 
System.out.println(c.get(c.DAY_OF_WEEK)); 

setFirstDayOfWeek() в данном случае не помогает.

Выходной сигнал должен быть 2 для Tueday, но он показывает мне 3. Любая помощь будет оценена.

ответ

3

Первый день недели происходит от текущей локали. Если вы не установили языковой стандарт календаря (Calendar.getInstance(Locale) или новый GregorianCalendar(Locale)), он будет использовать систему по умолчанию.

public static void main(String[] args) { 
    Calendar c = new GregorianCalendar(); 
    System.out.println(Locale.getDefault() + ": " + c.getFirstDayOfWeek()); 
} 

Это должно показать другой выход с различными параметрами виртуальной машины Java для языка/страны:

-Duser.language=en -Duser.country=US -> en_US: 1 (Sunday) 
-Duser.language=en -Duser.country=GB -> en_GB: 2 (Monday) 

Кроме того, вы можете использовать метод setFirstDayOfWeek() установить в первый день недели. Этот метод может влиять только на return values of WEEK_OF_MONTH или WEEK_OF_YEAR. F или DAY_OF_WEEK, он ничего не делает.

См here для более

Кроме того, если вы видите Calendar.java, вы увидите, что значения в течение нескольких дней постоянно, как показано ниже. Вот почему он вернет 1 для ПОНЕДЕЛЬНИКА, независимо от того, на что установлен первый день недели.

public final static int SUNDAY = 1;

общественный окончательный статический int MONDAY = 2; ....

общественный окончательный статический int SATURDAY = 7;

Вы можете сделать что-то, как показано ниже, и манипулировать данными в соответствии с первым днем, который вы устанавливаете.

[c.get(Calendar.DAY_OF_WEEK) - 1]); 
0

Старайтесь избегать использования необработанных значений, возвращаемых get. В вашем коде вы должны делать проверку всегда против констант, определенных в классе Calendar. Это имеет большое преимущество, и это более читаемо.

Рассмотрим следующие фрагменты

Здесь трудно найти в какой день недели вы хотите сделать какие действия

switch (c.get(Calendar.DAY_OF_WEEK)) { 
    case 2: 
     // do something 
     ; break; 
    case 3: 
     // do something 
     break; 

} 

Этот пример является более самостоятельной объяснения

switch (c.get(Calendar.DAY_OF_WEEK)) { 
    case Calendar.MONDAY: 
     // do something 
     ; break; 
    case Calendar.TUESDAY: 
     // do something 
     break; 

} 
Смежные вопросы