Узнайте о классе LocalDate в Java, о том, как создавать его экземпляры и других вариантах использования, таких как синтаксический анализ, форматирование и добавление продолжительности и периодов.
1. Обзор
Класс java.time.LocalDate, представленный в Java 8, представляет локальную дату без информации о времени и часовом поясе, например, '2019-03-27'. Мы можем использовать экземпляры LocalDate, когда нам нужно представить день без определенного времени дня — например, день рождения, праздник или отпуск, взятый сотрудником.
Обратите внимание, что экземпляры LocalDate являются неизменяемыми и потокобезопасными.
Ниже приведено объявление класса LocalDate в JDK.
public final class LocalDateextends Objectimplements Temporal, TemporalAdjuster, ChronoLocalDate, Serializable{//class body}
2. Создание экземпляра LocalDate
Как правило, мы будем создавать экземпляры LocalDate в двух условиях, а именно: получить текущую дату или создать LocalDate с заданными значениями дня, месяца и года.
2.1. Получить текущую дату
Используйте now() для получения сегодняшней даты. Чтобы получить дату в другом часовом поясе, передайте ZoneId в метод now().
LocalDate today = LocalDate.now();//Today's date in GMTLocalDate todayInGMT = LocalDate.now(ZoneId.of("GMT"));
2.2. Создать LocalDate со значениями
Чтобы создать локальную дату для определенного дня, месяца и года — используйте различные перегруженные фабричные методы of().
LocalDate today = LocalDate.of(2022, 1, 27);LocalDate today = LocalDate.of(2022, Month.JANUARY, 27)
Мы также можем получить экземпляр LocalDate, используя день эпохи.
LocalDate date = LocalDate.ofEpochDay(18823);
Другой интересный способ получить LocalDate — использовать день года. Например, 6 февраля 2022 года — 37-й день года.
LocalDate date = LocalDate.ofYearDay(2022, 37); //6th Feb 2022
3. Анализ строки в LocalDate
Класс LocalDate имеет два перегруженных метода parse() для преобразования строки в экземпляр LocalDate.
parse(CharSequence text) //1parse(CharSequence text, DateTimeFormatter formatter) //2
- Используйте первый метод, если строка содержит дату в шаблоне ISO_LOCAL_DATE, т.е. гггг-ММ-дд. Это шаблон по умолчанию для локальных дат в Java.
- Для любого другого шаблона даты нам нужно использовать второй метод, в котором мы передаем строку даты, а также форматировщик, который представляет пользовательский шаблон для этой строки даты.
LocalDate localDate = LocalDate.parse("2022-02-06");DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MMM-yyyy");LocalDate localDate = LocalDate.parse("6-Feb-2022", formatter);
4. Форматировать LocalDate в строку
Используйте метод LocalDate.format(DateTimeFormatter) для форматирования локальной даты в желаемое строковое представление.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MMM-yyyy");LocalDate today = LocalDate.now();String dateString = today.format(formatter); //23-Feb-2022
5. Сложение и вычитание LocalDate
LocalDate предоставляет следующие методы, которые возвращают новый и измененный экземпляр LocalDate относительно указанного экземпляра LocalDate.
- plusDays()
- plusWeeks()
- plusМесяцы()
- plusГоды()
- minusDays()
- minusWeeks()
- минусМесяцы()
- минусГоды()
LocalDate today = LocalDate.now();//Same date 3 years laterLocalDate localDate1 = today.plusYears(3);//local date before 3 monthsLocalDate localDate2 = today.minusMonths(3);
6. Примеры LocalDate
Давайте лучше разберем класс LocalDate, используя несколько примеров.