Добавить в корзинуПозвонить
Найти в Дзене
Записки о Java

Работа с датами и временем в Java

Работа с датами и временем — одна из самых важных, но и самых сложных задач в программировании. В Java подход к этой теме кардинально изменился с выходом Java 8, когда был представлен современный и удобный API — java.time, основанный на проекте Joda-Time. В этой статье мы подробно рассмотрим: До Java 8 разработчики использовали: Пример (до Java 8): Проблемы старого API: Начиная с Java 8, используйте java.time — он решает все эти проблемы. В Java 8 был добавлен пакет java.time, который стал стандартом для работы с датами и временем. Основные классы: 2. LocalDate — только дата 3. LocalTime — только время 4. ZonedDateTime — дата и время с часовым поясом 5. Instant — момент времени в UTC Используется для: API java.time — это мощный, безопасный и удобный способ работы с датами и временем в Java. Главные принципы: Примеры, рассмотренные в статье, можно найти по адресу: https://github.com/ShkrylAndrei/blog_yandex/tree/main/src/main/java/info/shkryl/workWithDateTime
Оглавление
Рисунок: работам с датами и временем в JAVA
Рисунок: работам с датами и временем в JAVA

Введение

Работа с датами и временем — одна из самых важных, но и самых сложных задач в программировании. В Java подход к этой теме кардинально изменился с выходом Java 8, когда был представлен современный и удобный API — java.time, основанный на проекте Joda-Time.

В этой статье мы подробно рассмотрим:

  • Проблемы старого API (Date, Calendar),
  • Новый API java.time (JSR-310),
  • Основные классы: LocalDateTime, ZonedDateTime, Instant, Duration, Period,
  • Форматирование и парсинг дат,
  • Практические примеры с комментариями.

1. Старый подход: java.util.Date и Calendar

До Java 8 разработчики использовали:

  • java.util.Date — представляет момент времени (в миллисекундах с эпохи Unix),
  • java.util.Calendar — для манипуляций с датами,
  • java.text.SimpleDateFormat — для форматирования.

Пример (до Java 8):

Листинг: пример работы с датой до Java 8
Листинг: пример работы с датой до Java 8

Проблемы старого API:

  • Не потокобезопасен (SimpleDateFormat),
  • Мутабельный (Calendar можно изменять),
  • Нелогичный API (месяцы с 0, нет отдельного класса для даты без времени),
  • Сложно работать с часовыми поясами.

Начиная с Java 8, используйте java.time — он решает все эти проблемы.

2. Новый API: java.time (JSR-310)

В Java 8 был добавлен пакет java.time, который стал стандартом для работы с датами и временем.

Основные классы:

  • LocalDateTime - Дата и время без часового пояса
  • LocalDate - Только дата (без времени)
  • LocalTime - Только время (без даты)
  • ZonedDateTime - Дата и время с учётом часового пояса
  • Instant - Момент времени в UTC (для логирования, баз данных)
  • Duration - Разница между двумя моментами (в наносекундах)
  • Period - Разница между датами (в годах, месяцах, днях)
  • DateTimeFormatter - Форматирование и парсинг

3. Основные классы и примеры

1. LocalDateTime — дата и время

Рисунок: листинг использования класса LocalDateTime
Рисунок: листинг использования класса LocalDateTime

2. LocalDate — только дата

Рисунок: листинг использования класса LocalDate
Рисунок: листинг использования класса LocalDate

3. LocalTime — только время

Рисунок: листинг использования класса LocalTime
Рисунок: листинг использования класса LocalTime

4. ZonedDateTime — дата и время с часовым поясом

Рисунок: листинг использования класса ZonedDateTime
Рисунок: листинг использования класса ZonedDateTime

5. Instant — момент времени в UTC

Используется для:

  • Логирования,
  • Хранения в базах данных,
  • Измерения производительности.
Рисунок: листинг использования класса Instant
Рисунок: листинг использования класса Instant

Заключение

API java.time — это мощный, безопасный и удобный способ работы с датами и временем в Java.

Главные принципы:

  • Используйте java.time вместо Date и Calendar.
  • Выбирайте тип в зависимости от задачи:LocalDateTime — если не нужен часовой пояс,
    ZonedDateTime — если важен часовой пояс,
    Instant — для хранения в базе или логах.
  • Всегда указывайте явно часовой пояс, если он важен.
  • Используйте DateTimeFormatter для форматирования.

Примеры, рассмотренные в статье, можно найти по адресу:

https://github.com/ShkrylAndrei/blog_yandex/tree/main/src/main/java/info/shkryl/workWithDateTime