LocalDate / LocalTime / LocalDateTime
С Java 8 в пакете java.time появился новый API даты и времени, заменяющий устаревшие Date и Calendar. Три ключевых класса:
LocalDate— календарная дата без времени и часового пояса (например,2026-05-15).LocalTime— время в течение суток без даты (например,14:30:00).LocalDateTime— комбинация даты и времени, тоже без часового пояса.
Все три класса неизменяемы (immutable) и потокобезопасны. Любая «модификация» возвращает новый объект.
Зачем нужны
Хранение и арифметика дат: возраст, длительность, дедлайны.
Форматирование и парсинг строк с помощью
DateTimeFormatter.Логирование событий и формирование отчётов с человекочитаемыми датами.
Способы создания
LocalDate.now()/LocalTime.now()/LocalDateTime.now()— текущие значения.LocalDate.of(int year, int month, int day).LocalTime.of(int hour, int minute[, int second]).LocalDateTime.of(int y, int mo, int d, int h, int mi[, int s]).LocalDate.parse("2026-05-15"),LocalTime.parse("14:30:00"),LocalDateTime.parse("2026-05-15T14:30").LocalDateTime.of(LocalDate date, LocalTime time)— собрать из двух частей.
Популярные методы
getYear(),getMonth(),getMonthValue(),getDayOfMonth(),getDayOfWeek().getHour(),getMinute(),getSecond()(у времени).plusDays(n),plusMonths(n),plusYears(n),minusDays(n)и т.п.isBefore(other),isAfter(other),isEqual(other).withYear(int),withMonth(int),withDayOfMonth(int)— копия с заменой компонента.format(DateTimeFormatter),DateTimeFormatter.ofPattern("...").LocalDate.atTime(LocalTime),LocalDateTime.toLocalDate(),LocalDateTime.toLocalTime().
Пример 1. Текущая дата и время
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class NowDemo {
public static void main(String[] args) {
System.out.println("Дата: " + LocalDate.now());
System.out.println("Время: " + LocalTime.now());
System.out.println("Дата и время:" + LocalDateTime.now());
}
}
Вывод (зависит от системного времени):
Дата: 2026-05-15
Время: 14:32:08.123456
Дата и время:2026-05-15T14:32:08.123456
Пример 2. Создание конкретных значений
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class CreateValues {
public static void main(String[] args) {
LocalDate d = LocalDate.of(2026, 9, 1);
LocalTime t = LocalTime.of(9, 0);
LocalDateTime dt = LocalDateTime.of(d, t);
System.out.println(d);
System.out.println(t);
System.out.println(dt);
}
}
Вывод:
2026-09-01
09:00
2026-09-01T09:00
Пример 3. Арифметика дат
import java.time.LocalDate;
public class DateMath {
public static void main(String[] args) {
LocalDate start = LocalDate.of(2026, 1, 1);
System.out.println("+30 дней: " + start.plusDays(30));
System.out.println("+1 месяц: " + start.plusMonths(1));
System.out.println("+1 год: " + start.plusYears(1));
System.out.println("-10 дней: " + start.minusDays(10));
}
}
Вывод:
+30 дней: 2026-01-31
+1 месяц: 2026-02-01
+1 год: 2027-01-01
-10 дней: 2025-12-22
Пример 4. Получение компонентов даты
import java.time.LocalDate;
import java.time.DayOfWeek;
public class DateParts {
public static void main(String[] args) {
LocalDate d = LocalDate.of(2026, 5, 15);
System.out.println("Год: " + d.getYear());
System.out.println("Месяц: " + d.getMonthValue());
System.out.println("День: " + d.getDayOfMonth());
DayOfWeek dow = d.getDayOfWeek();
System.out.println("День недели:" + dow);
}
}
Вывод:
Год: 2026
Месяц: 5
День: 15
День недели:FRIDAY
Пример 5. Сравнение дат
import java.time.LocalDate;
public class CompareDates {
public static void main(String[] args) {
LocalDate a = LocalDate.of(2026, 5, 15);
LocalDate b = LocalDate.of(2026, 9, 1);
System.out.println(a.isBefore(b));
System.out.println(a.isAfter(b));
System.out.println(a.isEqual(LocalDate.of(2026, 5, 15)));
}
}
Вывод:
true
false
true
Пример 6. Парсинг строки
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class ParseDemo {
public static void main(String[] args) {
LocalDate iso = LocalDate.parse("2026-05-15");
System.out.println(iso);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd.MM.yyyy");
LocalDate custom = LocalDate.parse("15.05.2026", fmt);
System.out.println(custom);
}
}
Вывод:
2026-05-15
2026-05-15
Пример 7. Форматирование под отчёт
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class FormatDemo {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2026, 5, 15, 14, 30);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
System.out.println(dt.format(fmt));
DateTimeFormatter log = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss");
System.out.println("log_" + dt.format(log) + ".txt");
}
}
Вывод:
15.05.2026 14:30
log_2026-05-15_14-30-00.txt
Пример 8. Возраст в днях между двумя датами
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class AgeInDays {
public static void main(String[] args) {
LocalDate birth = LocalDate.of(2010, 9, 1);
LocalDate today = LocalDate.of(2026, 5, 15);
long days = ChronoUnit.DAYS.between(birth, today);
long years = ChronoUnit.YEARS.between(birth, today);
System.out.println("Прошло дней: " + days);
System.out.println("Полных лет: " + years);
}
}
Вывод:
Прошло дней: 5735
Полных лет: 15
См. также
Примечание
Описание основано на официальной документации Oracle Java SE 21 API (https://docs.oracle.com/en/java/javase/21/docs/api/). Материал распространяется на условиях Oracle Free Documentation License. Тексты статьи написаны редакцией AlashEd своими словами; примеры кода — авторские.