tl; dr
Учитывая год и номер недели (например, 201927), я мог бы рассчитать начальный и конечный день для этой недели (201917)?
YearWeek // Represent a particular week of a week-based year.
.of( // Factory method, rather than calling `new`.
2019 , // The number of the desired week-based year ( *not* calendar year! ).
26 // Week of the year, 1 through 52 or 53.
)
.atDay( // Generate a `LocalDate` object for a day within this week.
DayOfWeek.MONDAY // Specify the day-of-week.
) // Generate a `LocalDate` for the first day of this week.
.plusDays( 6 ) // Generate a `LocalDate` representing the last day of this week.
ThreeTen-Extra - YearWeek
Работать со стандартными неделями намного проще с классом org.threeten.extra.YearWeek
, представленным в ThreeTen-Extra проект.Этот проект добавляет функциональность к современным java.time классам, встроенным в Java 8 и более поздние версии.
Если у вас есть строка, соответствующая ISO 8601 , представляющая стандарт неделя , синтаксический анализ.
String input = "2019-W27";
YearWeek yw = YearWeek.parse( input);
yw.toString (): 2019-W27
Стандартная неделя начинается с понедельника.Объект YearWeek
может генерировать LocalDate
для любого дня недели.Укажите день, используя перечисление DayOfWeek
.
LocalDate ld = yw.atDay( DayOfWeek.MONDAY);
ld.toString (): 2019-07-01
Чтобы получитьостаток недели добавляйте день снова и снова.
LocalDate nextDay = ld.plusDays( 1 ) ;
ld.toString (): 2019-07-02
Чтобы завершитьнеделю, добавьте шесть.
LocalDate nextDay = ld.plusDays( 6 ) ;
ld.toString (): 2019-07-07
Или получите фантазию, используя потоки Java.Создайте поток, вызвав LocalDate::datesUntil
.
Stream < LocalDate > stream = ld.datesUntil ( ld.plusWeeks ( 1 ) );
List < LocalDate > dates = stream.collect ( Collectors.toList () );
date.toString (): [2019-07-01, 2019-07-02, 2019-07-03, 2019-07-04, 2019-07-05, 2019-07-06, 2019-07-07]
Кстати, стандартный способ представления дня неделив течение стандартной недели стоит добавить дефис и номер 1-7.
2019-W26-1 = понедельник
2019-W26-2 = вторник
…
2019-W26-7 = воскресенье