Я пытаюсь получить номер недели полной LocalDate в формате:
dd.MM.yyy
Я не нашел функцию в Java 8 Date API, которая возвращает номер недели, и я попытался создать алгоритм, но это не сработало.
Я пытаюсь получить номер недели полной LocalDate в формате:
dd.MM.yyy
Я не нашел функцию в Java 8 Date API, которая возвращает номер недели, и я попытался создать алгоритм, но это не сработало.
Одно маленькое предупреждение. Я еще не тестировал это, но просматриваю документацию API WeekFields
и LocalDate.get
, вы должны сделать что-то вроде:
LocalDate date = ...;
// Or use a specific locale, or configure your own rules
WeekFields weekFields = WeekFields.of(Locale.getDefault());
int weekNumber = date.get(weekFields.weekOfWeekBasedYear());
WeekFields.ISO
- person Michael Piefel; 10.04.2017
WeekFields.ISO
!
- person membersound; 11.09.2019
Sunday
. Тем не менее, если вы разрабатываете приложение для европейских клиентов, а локальное значение по умолчанию в вашей системе равно en_US
(что часто имеет место для разработчиков!), то ваш результат будет отличаться от ожидаемого, если вы этого не заметили.
- person membersound; 11.09.2019
Ответ Марка Роттевила почти правильный и снова пример того, какой потенциал путаницы существует в классе WeekFields
(аналогично звучащие имена методов, но отличающиеся от интуитивного гражданского использования). Для правильного кода требуется еще одно поле:
LocalDate date = LocalDate.now();
TemporalField woy = WeekFields.of(Locale.getDefault()).weekOfWeekBasedYear();
int weekNumber = date.get(woy);
См. также аналогичные дебаты в этом SO-post, особенно обсуждение и комментарии по поводу ответа @kleopatra.
WeekFields
внимательно изучите документацию класса, так как она объясняет эту разницу.
- person Mark Rotteveel; 24.09.2014
WeekFields.ISO
- person Michael Piefel; 10.04.2017