Работа с датами в Java: java.time и Joda-Time

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что это и зачем нужно?

Работа с датами и временем — одна из самых частых задач в программировании на Java. Стандартная библиотека java.time (введена в Java 8) предоставляет мощный и интуитивно понятный API для обработки дат, времени, временных зон и периодов. До Java 8 разработчики часто использовали стороннюю библиотеку Joda-Time, которая стала прототипом для java.time. Обе библиотеки решают проблемы старого java.util.Date и java.util.Calendar: потокобезопасность, неизменяемость объектов и удобные методы форматирования.

Как установить?

java.time встроен в Java 8 и новее — установка не требуется. Для Joda-Time добавьте зависимость в Maven:

<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.12.5</version>
</dependency>

Для Gradle: implementation 'joda-time:joda-time:2.12.5'.

Основные функции

  • LocalDate, LocalTime, LocalDateTime — работа с датой/временем без временной зоны.
  • ZonedDateTime, OffsetDateTime — учёт часовых поясов.
  • Period, Duration — разница между датами и временем.
  • DateTimeFormatter — гибкое форматирование и парсинг.
  • Instant — момент времени в UTC.

Пример кода на Java

import java.time.*;
import java.time.format.DateTimeFormatter;

public class DateExample {
public static void main(String[] args) {
// Текущая дата
LocalDate today = LocalDate.now();
System.out.println("Сегодня: " + today);

// Создание конкретной даты
LocalDate specificDate = LocalDate.of(2025, Month.MARCH, 15);
System.out.println("Конкретная дата: " + specificDate);

// Разница между датами
Period period = Period.between(specificDate, today);
System.out.println("Разница: " + period.getYears() + " лет, " + period.getMonths() + " месяцев, " + period.getDays() + " дней");

// Форматирование
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
String formatted = today.format(formatter);
System.out.println("Отформатировано: " + formatted);

// Парсинг строки
LocalDate parsed = LocalDate.parse("01.01.2024", formatter);
System.out.println("Распарсено: " + parsed);

// Работа с временем и зонами
ZonedDateTime zoned = ZonedDateTime.now(ZoneId.of("Europe/Moscow"));
System.out.println("Московское время: " + zoned);
}
}

Когда использовать

java.time — основной выбор для всех новых проектов на Java 8+. Используйте его для: расчёта возраста, дедлайнов, логов с таймстемпами, планировщиков задач, работы с календарями и временными зонами. Joda-Time полезна для поддержки старых проектов или если нужны дополнительные функции, например, Interval или MutableDateTime. Обе библиотеки значительно упрощают код по сравнению с устаревшим Calendar.

Рекомендаций