Использование java.time
Современный подход заключается в использовании классов java.time, которые вытесняют старые и проблемные классы даты и времени.
С классами java.time работать намного проще. В частности, они устраняют неоднозначность, поднятую в Вопросе. Вы можете явно запросить либо ранее воскресенье, либо позже воскресенье.
Класс LocalDate
представляет значение только для даты без времени суток и без часового пояса.
Перечисление Month
предоставляет дюжину предварительно определенных объектов, по одному на каждый месяц года. Эти перечисляемые объекты безопаснее использовать, но вместо этого вы можете использовать простое число для месяца. В отличие от предыдущих классов, эти месяцы имеют нормальную нумерацию, 1–12 для января-декабря.
LocalDate localDate = LocalDate.of( 2009 , Month.AUGUST, 22 );
Интерфейс TemporalAdjuster
позволяет манипулировать значениями даты и времени. Класс TemporalAdjusters
(обратите внимание на множественное число s
) предоставляет несколько удобных реализаций.
Регуляторы previous
& next
исключают саму дату из рассмотрения. Методы previousOrSame
& nextOrSame
возвращают указанную дату, если это действительно желаемый день недели.
Перечисление DayOfWeek
предоставляет семь предопределенных объектов, по одному на каждый день недели.
LocalDate previousSunday = localDate.with( TemporalAdjusters.previous ( DayOfWeek.SUNDAY ));
LocalDate previousOrSameSunday = localDate.with( TemporalAdjusters.previousOrSame ( DayOfWeek.SUNDAY ));
LocalDate nextSunday = localDate.with( TemporalAdjusters.next ( DayOfWeek.SUNDAY ));
LocalDate nextOrSameSunday = localDate.with( TemporalAdjusters.nextOrSame ( DayOfWeek.SUNDAY ));
Дамп на консоль.
System.out.println ("localDate: " + localDate + " ( " + localDate.getDayOfWeek ().getDisplayName ( TextStyle.FULL, Locale.US ) + " )");
System.out.println ("previousSunday: " + previousSunday );
System.out.println ("nextSunday: " + nextSunday );
localDate: 2009-08-22 (суббота)
предыдущее воскресенье: 2009-08-16
следующее воскресенье: 2009-08-23
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
.
Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где получить классы java.time?
- Java SE 8 и SE 9 и более поздние
- Встроенный.
- Часть стандартного Java API со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport .
- Android
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .