tl;dr
Устаревший способ определения номера дня недели, определенный ISO 8601 (понедельник-воскресенье, 1-7):
int dayOfWeekISO = cal.get( Calendar.DAY_OF_WEEK ) - 1 ;
if( dayOfWeekISO == 0 ) { // For Sunday ( 1 - 1 = 0), add 7.
dayOfWeekISO = ( dayOfWeekISO + 1 ) ;
}
Современный способ:
LocalDate.of( 2017 , Month.JULY , 30 ) // Date-only value.
.getDayOfWeek() // `DayOfWeek.SUNDAY` enum object.
.getValue() // 7 for Sunday. (1 = Monday, per ISO 8601 standard.)
7
Подробности
Правильный принятый ответ Майи: Эти int
константы на Calendar
определяют неделю как 1–7 для воскресенье – суббота, как принято в США.
ДЕНЬ НЕДЕЛИ
общедоступный статический финал через DAY_OF_WEEK
Номер поля для получения и установки с указанием дня недели. Это поле принимает значения ВОСКРЕСЕНЬЕ, ПОНЕДЕЛЬНИК, ВТОРНИК, СРЕДА, ЧЕТВЕРГ, ПЯТНИЦА и СУББОТА.
Если вы абсолютно не можете добавить библиотеку, то вы должны изменить определение недели с Calendar
на воскресенье-субботу с 1 по 7. Чтобы поставить Деньги на первое место, вычтите 1, затем проверьте наличие 0, к которому вы прибавляете 7.
int dayOfWeekISO = cal.get( Calendar.DAY_OF_WEEK ) - 1 ;
if( dayOfWeekISO == 0 ) { // For Sunday ( 1 - 1 = 0), add 7.
dayOfWeekISO = ( dayOfWeekISO + 1 ) ;
}
Кстати, чтобы пойти другим путем, от стиля ISO 8601 до стиля США (воскресенье первое ), рассчитайте по модулю 7, затем прибавьте 1.
( DayOfWeek.SUNDAY.getValue() % 7 ) + 1
Нравится:
System.out.println( ( DayOfWeek.SUNDAY.getValue() % 7 ) + 1 ) ;
System.out.println( ( DayOfWeek.MONDAY.getValue() % 7 ) + 1 ) ;
System.out.println( ( DayOfWeek.TUESDAY.getValue() % 7 ) + 1 ) ;
System.out.println( ( DayOfWeek.WEDNESDAY.getValue() % 7 ) + 1 ) ;
System.out.println( ( DayOfWeek.THURSDAY.getValue() % 7 ) + 1 ) ;
System.out.println( ( DayOfWeek.FRIDAY.getValue() % 7 ) + 1 ) ;
System.out.println( ( DayOfWeek.SATURDAY.getValue() % 7 ) + 1 ) ;
1
2
3
4
5
6
7
Но рассмотрите возможность добавления библиотеки современных классов даты и времени. Стоит добавить банку в свой проект. Эти старые классы свиданий действительно убогие.
Избегайте устаревших классов даты и времени
Класс Calendar
является частью проблемных старых устаревших классов даты и времени, которые теперь вытеснены классами java.time.
Java.время
Перечисление java.time.DayOfWeek
является стандартным и представляет неделя определяется ISO 8601, где неделя длится с понедельника по воскресенье, пронумерована от 1 до 7. .
Класс LocalDate
представляет значение без времени суток и без часового пояса.
LocalDate ld = LocalDate.of( 2017 , Month.JULY , 30 ) ;
DayOfWeek dow = ld.getDayOfWeek() ;
int dowNumber = dow.getValue() ;
String output = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
См. выполнение этого кода на сайте IdeOne.com.
ld.toString(): 30 июля 2017 г.
dow.toString(): ВОСКРЕСЕНЬЕ
внизНомер: 7
выходной: воскресенье
О java.time
Платформа java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.
Чтобы узнать больше, см. учебник по Oracle. И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. . Этот проект является испытательным полигоном для возможных дополнений к java.time в будущем. Здесь вы можете найти несколько полезных классов, таких как Interval
a>, YearWeek
, YearQuarter
и подробнее.
person
Basil Bourque
schedule
05.08.2017