2013-12-18 5 views
1

Я управляю некоторыми датами в своих собственных классах дат. Я хочу, чтобы создать метод, как это в моей дате:Получение правильного дня недели (Календарь Java)

int getWeekdayIndex() 

прямо сейчас lookes что-то вроде этого:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
cal.set(year, month+1, day); // data of this date 
int weekdayIndex = cal.get(Calendar.DAY_OF_WEEK); 
return weekdayIndex; 

Я знаю DAY_OF_WEEK возвращает 1 (воскресенье) до 7 (суббота), но если Я проверить этот метод с

2014-01-06 Я получаю индекс 5 (suppost быть 2)

2014-01-07 Я получаю индекс 6 (suppost быть 3)

(я живу в Берлине UTC + 01: 00 - если это имеет значение)

+0

Что именно вы вводите, когда говорите «Я тестирую этот метод с помощью»? – SimplyPanda

+1

Можете ли вы разместить свой код, так что это clea, как переменные год, месяц и день заселены, thx – JosefN

ответ

2

Вы должны использовать:

cal.set(year, month-1, day); // data of this date 

Обратите внимание на month-1 часть вместо month+1.

Предполагая, что значение этого месяца является:

1 for Jan 
2 for Feb 
3 for Mar 
... 
+0

Я чувствую себя глупо сейчас ^^ – user2078872

1

Что в вашем сценарии month? Если это 0 для «Январь», вы добавляете 1 при вызове set method. Но месяцы на Java основаны на нуле, поэтому вы устанавливаете «февраль», а 6 февраля 2014 года - четверг (5), а 7 февраля 2014 года - пятница (6).

month - значение, используемое для установки поля календаря MONTH. Значение месяца равно 0. например, 0 за январь.

Попробуйте изменить

cal.set(year, month+1, day); 

в

cal.set(year, month, day); 
0

FYI, Joda-Time 2,3 имеет удобные методы для такой работы.

Класс DateTime предлагает метод dayOfWeek. Из этого вы можете получить либо локализованное имя дня, либо ваши нужды, номер. Joda времени отсчитывает дни, используя международный стандарт ISO 8601, где понедельник является 1 и воскресенье 7.

Пример кода ...

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
// import org.joda.time.*; 

DateTimeZone berlinTimeZone = DateTimeZone.forID("Europe/Berlin"); 

DateTime dateTime = new DateTime(2013, DateTimeConstants.DECEMBER, 13, 14, 15, 16, berlinTimeZone); 
String dayOfWeekAsText = dateTime.dayOfWeek().getAsText(Locale.GERMANY); 
int dayOfWeekAsNumber = dateTime.dayOfWeek().get(); 

System.out.println("dayOfWeekAsText: " + dayOfWeekAsText); 
System.out.println("dayOfWeekAsNumber: " + dayOfWeekAsNumber); 

При запуске ...

dayOfWeekAsText: Freitag 
dayOfWeekAsNumber: 5 

Легко перейти на другой месяц ,

DateTime previousMonthDateTime = dateTime.minusMonths(1); 
DateTime nextMonthDateTime = dateTime.plusMonths(1); 
Смежные вопросы