Этот пост является продолжением нашего обзора API даты, который вышел с выпуском Java 8. Мы собираемся продолжить нашу концентрацию на классах, которые упрощают работу с датами / временем. Работа с объектами даты в предыдущих выпусках Java была очень сложной в плане добавления времени или получения разницы между датами. Надеемся, что после просмотра классов, представленных здесь, ваше мнение о работе с датами и временем в Java изменится. В частности, мы рассмотрим следующие классы:
- Другие классы для представления даты / времени
ZonedDateTime
иOffsetDateTime
- Получение текущего снимка во времени с
Instant
- Использование
Clock
класса, чтобы получить системное время, но указать разные часовые пояса - Представлять произвольное количество дней с
Period
классом - Представлять произвольное количество часов с
Duration
классом
Зонированные / смещенные даты и время
В последнем посте мы рассмотрели LocalDateTime
, LocalDate
и LocalTime
классы. Как следует из названия, эти классы дают дату и / или время для данного населенного пункта без часового пояса или смещения от времени UTC / Greenwhich. Java 8 предоставляет класс ZonedDateTime, который предоставляет дату и время представлением часового пояса. Создание ZonedDateTime
экземпляра может быть выполнено несколькими способами, но здесь мы продемонстрируем использование двух из множества статических фабричных методов:
Далее у нас есть OffsetDateTime
и те OffsetTime
классы , которые представляют собой дату и время , или время (соответственно) с смещениями от UTC / Greenwhich времени. Здесь мы показываем создание OffsetDateTime
и OffsetTime
использование некоторых других доступных статических фабричных методов:
В последнем примере мы видим использование Instant
класса, который мы скоро представим. Стоит отметить , в этот момент , что ZondedDateTime
, OffsetDateTime
классы хранят время до наносекундной точности. Обычно мы используем ZonedDateTime
класс при отображении даты и времени пользователям и OffsetDateTime
класс при взаимодействии с системами.
Часы
[A href = «http://docs.oracle.com/javase/8/docs/api/java/time/Clock.html» style = «font-style: наследовать; вариант шрифта: наследовать; вес шрифта : наследовать; высота строки: наследовать; размер шрифта: 18 пикселей; цвет: rgb (117, 21, 144); -вебкит-переход: цвет 0,3 с; переход: цвет 0,3 с; пробел: предварительная переноска; слово -wrap: break-word; «] Класс часов дает нам возможность получить текущую дату / время из системных часов с определенным часовым поясом. Хотя существуют классы даты и времени, у которых есть now()
метод, возвращающий текущую дату и время, системные часы используют часовой пояс по умолчанию. Clock
Класс позволяет получить системное время с заданной временной зоной. Затем мы можем подключить Clock
экземпляр к другим классам, где мы хотим получить текущее время, используя данный часовой пояс.
Теперь мы можем переработать наш предыдущий пример создания OffsetTime
объекта, используя Clock
экземпляр для установки желаемого часового пояса:
Clock
Класс также позволяет указать , как она «галочка», это означает , что мы можем иметь время вернулись из Clock
экземпляра тикает на целых минутах или секундах
Мгновенное
Класс Instant используется для захвата текущего «момента» во времени. Instant
Класс полезен для получения временных меток событий , а также имеет точность наносекунд.
В Instant
классе есть несколько других методов для настройки Instant
экземпляра, таких как добавление / вычитание времени или преобразование в OffsetDateTime
или ZonedDateTime
.
период
Класс Period представляет произвольное количество времени в годах, месяцах или днях. Period
объекты могут быть особенно полезны для добавления / вычитания времени из даты. Например:
Period
Класс также предлагает статический метод , Period.between
который является большим для определения истекшего времени между датами:
Хотя для Period.between
метода требуются типы LocalDate
, классы даты и времени в java.time
пакете предлагают toLocalDate()
метод, который возвращает значение LocalDate
из экземпляра даты и времени.
продолжительность
Класс Duration представляет произвольное количество времени в часах, минутах или секундах. Шаблон использования для Duration
аналогичен тому из Period
класса. Вот примеры настройки временных объектов с помощью Duration
класса:
В Duration
классе также есть between
метод определения количества времени (в часах) между объектами времени:
Duration.between
Метод требует типов Temporal
. Все классы времени и даты в java.time
пакете реализуют Temporal
интерфейс.
Вывод
Это завершает наш краткий обзор нового API даты в Java 8. Надеюсь, вы сможете увидеть обещание в новом API даты для работы с датами и временем. В следующих статьях я планирую продолжить рассказ о новых возможностях Java 8. Спасибо за ваше время.
Ресурсы
-
Joda Time — библиотека даты и времени Java для использования в версиях Java <8
-
Пакет java.time содержит документацию по java для классов, обсуждаемых в этом посте.
-
Функциональное программирование в Java 8 отличный ресурс по использованию новых функциональных компонентов в Java 8
-
Исходный код этого поста