Цель этой статьи (часть 1) — помочь вам понять и правильно использовать новую библиотеку Date,Time в Java 8.
В прошлом я сталкивался с проблемой использования Java-класса Date при построении собственного приложения для Android по расписанию, такого как расчет продолжительности, работа с високосными секундами и т. д.
Большинство методов класса Date устарели в Java 1.1, когда был введен класс Calendar. В этой статье вы познакомитесь с некоторыми основными моментами из Java 8 Date, Time API, которые в старой Java Date делают вычисления времени такими неприятными, и как новый Date and Time API решает эти проблемы.
- Мгновенныйкласс:
Класс 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.