Нам может потребоваться получить первый или последний день недели(или месяца, или года) для различных задач, таких как отчетность, планирование и анализ. В этом руководстве по Java обсуждаются быстрые решения для поиска этих дат с использованием класса TemporalAdjusters, добавленного в Java 8 Date Time changes.
LocalDate сегодня = LocalDate.of(2024, 3, 29);// Первый и последний день неделиLocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));// Первый и последний день месяцаLocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());// Первый и последний день годаLocalDate firstDayOfYear = today.with(TemporalAdjusters.firstDayOfYear());LocalDate lastDayOfYear = today.with(TemporalAdjusters.lastDayOfYear());
1. Класс Темпоральных Регулировщиков
Класс Java 'java.time.temporal.TemporalAdjusters' предоставляет методы для корректировки дат в соответствии с шаблоном проектирования стратегии. Он доказал методы для корректировки указанной даты.
Класс TemporalAdjusters содержит стандартный набор корректоров, доступных в виде статических методов, таких как:
- поиск первого или последнего дня месяца
- найти первый день следующего месяца
- нахождение первого или последнего дня года
- нахождение первого дня следующего года
- поиск первого или последнего дня недели в течение месяца, например, «первая среда июня»
- поиск следующего или предыдущего дня недели, например «следующий четверг»
Мы должны использовать синтаксис temporal.with(thisAdjuster) для корректировки даты в целях чистого кода. Temporal может быть любым классом даты и времени, таким как LocalDate или LocaldateTime и т. д.
1. Первый день и последний день недели
Мы можем использовать следующие два метода из TemporalAdjusters для расчета первого и последнего дня недели, в которой находится указанная дата. Обратите внимание, что мы предполагаем, что первым днем недели всегда является понедельник. Если ваше приложение предполагает любой другой день в качестве начала недели, то используйте этот день.
- previousOrSame(DayOfWeek): корректирует дату на первое вхождение указанного дня недели.
- nextOrSame(DayOfWeek): корректирует дату на первое вхождение указанного дня недели.
LocalDate today = LocalDate.of(2024, 4, 26);LocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));System.out.println(firstDayOfWeek);System.out.println(lastDayOfWeek);
Вывод программы:
2024-04-222024-04-28
2. Первый день и последний день месяца
Чтобы найти первый и последний день месяца, на который приходится указанная дата, можно использовать следующие два метода.
- firstDayOfMonth(): возвращает корректор, который возвращает новую дату, установленную на первый день текущего месяца.
- lastDayOfMonth(): возвращает корректор, который возвращает новую дату, установленную на последний день текущего месяца.
LocalDate today = LocalDate.of(2024, 4, 26);LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());System.out.println(firstDayOfMonth);System.out.println(lastDayOfMonth);
Вывод программы:
2024-04-012024-04-30
Кроме того, в качестве сокращенного подхода мы можем напрямую использовать LocalDate.withDayOfMonth(1), чтобы перейти к первому дню, а затем вычислить последний день месяца.
LocalDate today = LocalDate.of(2024, 4, 26);LocalDate firstDayOfMonth = today.withDayOfMonth(1);LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth());System.out.println(firstDayOfMonth);System.out.println(lastDayOfMonth);
выход:
2024-04-012024-04-30
3. Первый день и последний день года
Для получения первого и последнего дня текущего года можно использовать следующие методы.
- firstDayOfYear(): возвращает корректировщик первого дня года.
- lastDayOfYear(): возвращает корректировщик последнего дня года
LocalDate today = LocalDate.of(2024, 4, 26);LocalDate firstDayOfYear = today.with(TemporalAdjusters.firstDayOfYear());LocalDate lastDayOfYear = today.with(TemporalAdjusters.lastDayOfYear());System.out.println(firstDayOfYear);System.out.println(lastDayOfYear);
Вывод программы:
2024-01-012024-12-31
4. Заключение
В этом кратком руководстве по Java приведены фрагменты кода для быстрого расчета следующих значений:
- Получить первый и последний день текущей недели
- Получить первый и последний день текущего месяца
- Получить первый и последний день текущего года
Не забудьте правильно указать дни начала и окончания недели в соответствии с требованиями вашего приложения.