ТЛ; др
LocalDate.of(2018 , Month.DECEMBER , 31)
.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR)
Locale
Не уверен, что прямого ответа на ваш вопрос, но, как чтобы быть отличным Locale
значения в игре. В Calendar
определение недели зависит от локали.
Но это спорный. Вы должны использовать классы java.time, которые заменили класс Calendar
.
java.time
Calendar
является частью проблемных старых классов даты и времени, которые в настоящее время наследие, вытесняется java.time классов. Для более ранних Android см. Последние пули ниже.
Вы должны определить, что вы подразумеваете под номером недели. Существуют разные способы определения номера недели и недели.
По умолчанию java.классы времени используют стандарт ISO 8601 definition: Неделя № 1 имеет первый четверг календарного года и начинается в понедельник (как вы просили). Таким образом, годы имеют 52 или 53 недели. Первый и последний несколько дней календарного года могут приземляться в предыдущем/последующем недельном году.
Класс LocalDate
представляет собой значение только для даты без времени суток и без часового пояса.
LocalDate ld = LocalDate.of(2012 , Month.AUGUST , 7) ;
Опрос на стандартный номер недели. Вы можете задать для любого из этих объектов TemporalField
: IsoFields.WEEK_BASED_YEAR
& IsoFields.WEEK_OF_WEEK_BASED_YEAR
int weekOfWeekBasedYear = ld.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR) ;
int yearOfWeekBasedYear = ld.get(IsoFields.WEEK_BASED_YEAR) ;
Dump утешать с использованием стандартного ISO 8601 format of YYYY-Www-D
.
String isoOutput = yearOfWeekBasedYear + "-W" + String.format("%02d", weekOfWeekBasedYear) + "-" + dayOfWeekNumber ;
System.out.println(ld + " is ISO 8601 week: " + isoOutput) ;
См. Это code run live at IdeOne.com.
2012-08-07 является ISO 8601 неделя: 2012-W32-2
Кстати, если Андроид когда-либо в состоянии запустить ThreeTen-Extra библиотеку, вы найдете его YearWeek
класс полезен ,
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют трудные старые классы времени java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8, Java SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
- Android
- Более поздние версии Android реализаций пачке классов java.time.
- Для более ранних Android, проект ThreeTenABP адаптируется ThreeTen-Backport (упомянутый выше). См. How to use ThreeTenABP….
Местное поведение в сочетании с использованием стандартного языка Locale? –