Define "Неделя месяца"
Сначала вы должны уточните, что вы подразумеваете под «неделей месяца». Неделя № 1 содержит первую часть месяца? Так, когда заканчивается неделя, в воскресенье? Суббота?
Или неделя № 1, содержащая первый понедельник? Первое воскресенье?
TemporalAdjuster
The java.time классы включает в себя интерфейс для манипулирования TemporalAdjuster
объекта даты и время, чтобы произвести другие.
Класс TemporalAdjusters
(обратите внимание на множественное число) предоставляет несколько реализаций. Один из них - dayOfWeekInMonth
, чтобы ответить на такие вопросы, как «второй вторник марта».
Внимательно прочитайте документ класса для этого регулятора.
ISO 8601
Стандарт ISO 8601 определяет разумные текстовые представления значений даты и времени. Я предлагаю вам придерживаться этого, а не самостоятельно.
Итак, вместо Dec 2016
, используйте 2016-12
.
В классах java.time по умолчанию используются ISO 8601. Например, класс YearMonth
может непосредственно анализировать и генерировать такие значения, как 2016-12
.
YearMonth ym = YearMonth.of(2016 , 12);
... или использовать объект Month
перечислимых для ясности ...
YearMonth ym = YearMonth.of(2016 , Month.DECEMBER);
вызова toString
для создания ISO 8601 отформатированной строки.
Ут: ToString(): 2016-12
YearMonth ym = YearMonth.parse("2016-12");
LocalDate
класс представляет собой дату только значение без времени суток и без временной зоны.Объект YearMonth
может дать вам LocalDate
в первый и последний день месяца.
Пример
Если определить неделю-оф-месяца, как, начиная с 1-го и заканчивая в воскресенье, а затем сделать что-то вроде этого. Приращивание с каждым днем, печать каждого дня месяца. Проверяйте каждый день недели, чтобы узнать, является ли это последним днем недели (по вашему собственному определению) и, следовательно, нужно перевернуть на новую строку.
Вы, если необходимо, можете это сделать. И вы можете очистить его, чтобы не печатать запятую в конце. Но это заставляет вас идти в правильном направлении.
YearMonth ym = YearMonth.parse("2016-12");
LocalDate firstOfMonth = ym.atDay(1);
LocalDate lastOfMonth = ym.atEndOfMonth();
int nthWeek = 1;
LocalDate ld = firstOfMonth;
while(! ld.isAfter(lastOfMonth)) {
System.out.print(ld.getDayOfMonth() + ", ");
if(ld.getDayOfWeek().equals(DayOfWeek.SUNDAY)) {
System.out.println(""); // Wrap to next line.
}
ld = ld.plusDays(1); // Setup for next loop.
}
System.out.println("\nDone.");
См. live code in IdeOne.com.
1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31,
Готово.
Возможно, вам помогут, если вы покажете, что вы пробовали. Пока он стоит, вы просите сделать свою работу за вас. – lexicore
Уточните, как именно вы определяете неделю. –