Цель этой статьи (часть 1) — помочь вам понять и правильно использовать новую библиотеку Date,Time в Java 8.

В прошлом я сталкивался с проблемой использования Java-класса Date при построении собственного приложения для Android по расписанию, такого как расчет продолжительности, работа с високосными секундами и т. д.

Большинство методов класса Date устарели в Java 1.1, когда был введен класс Calendar. В этой статье вы познакомитесь с некоторыми основными моментами из Java 8 Date, Time API, которые в старой Java Date делают вычисления времени такими неприятными, и как новый Date and Time API решает эти проблемы.

  1. Мгновенныйкласс:

Класс Instant представляет точку на временной шкале. Мгновенные значения восходят к миллиарду лет (Instant.MIN). Этого недостаточно, чтобы выразить возраст Вселенной (около 13,5 миллиардов лет), но этого должно хватить для всех практических целей. Наибольшее значение Instant.MAX — 31 декабря 1 000 000 000 года.

Этот класс следует использовать для измерения времени работы алгоритма:

ПРИМЕЧАНИЕ. Длительность — это время, равное двум мгновениям. Мы можем получить длину Duration в различных единицах измерения, используя методы:toNanos, toMillis, toSeconds, toMinutes, toHours или toDays. См. https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html для ознакомления со всеми спецификациями класса Duration.

2. Локальный класс даты/времени:

В этой части мы переходим от абсолютного времени к человеческому времени. В новом Java API существует два вида человеческого времени: местная дата/время и зональное время.

Местная дата/время содержит дату и/или время дня,но не имеет связанной информации о зоне. Отсюда у нас есть 3 класса: LocalDate, LocalTime, LocalDateTime.

  • LocalDate — это дата с указанием года, месяца и дня месяца. Чтобы построить его, мы можем использовать статические методы now или of :

  • LocalTime представляет время суток, например 15:30:00. Вы можете создать экземпляр с помощью методов now или of:

  • LocalDateTime содержит информацию об указанных LocalDate и LocalTime.

Разработчик API рекомендует не использовать зональное время, если вы действительно не хотите представлять экземпляры абсолютного времени. Дни рождения, праздники, расписания и т. д. обычно лучше всего представлять в виде местных дат или времени.

Мы также можем добавить дни, получить разницу между двумя локальными датами (вернуть Period), получить день недели… Новый Java API Date/Time поддерживает несколько полезных методов для работы с датами и временем. См.: документация для LocalDate, документация для LocalTime и документация для LocalDateTime.