Java TemporalQuery

TemporalQuery — это стандартный способ запроса временных объектов(LocalDate, LocalDateTime и т. д.) для принятия лучших бизнес-решений. В Java 8 все основные классы даты и времени реализуют интерфейсы Temporal и TemporalAccessor, поэтому TemporalQuery можно запускать для всех этих классов Java.

1. Интерфейс TemporalQuery

В новом Java Date API интерфейс Temporal представляет дату, время или их комбинацию. Например, LocalDate, LocalDateTime и т. д.

TemporalQuery — это функциональный интерфейс, и поэтому его можно использовать в качестве цели назначения для лямбда-выражения или ссылки на метод. Метод queryFrom() принимает объект Temporal для запроса и возвращает запрошенное значение.

Его реализации определяют логику запроса и отвечают за документирование этой логики. Он может использоваться любым методом TemporalAccessor для определения результата.

Приведенное определение интерфейса соответствует стандартному API Java.

@FunctionalInterfacepublic interface TemporalQuery<R>{R queryFrom(TemporalAccessor temporal);}

2. Примеры временных запросов

Давайте рассмотрим несколько примеров, чтобы лучше понять этот интерфейс.

2.1. Указано ли время между рабочими часами?

Мы можем использовать TemporalQuery, чтобы определить, находится ли заданное время в определенном диапазоне. Например, находится ли время между рабочими часами или нет.

 Местное время сейчас = Местное время.сейчас();System.out.println("Текущий рабочий :: " + now.query(WorkingHoursQuery));private static final TemporalQuery<Boolean> WorkingHoursQuery = temporal -> {Местное время t = Местное время.from(временное);вернуть t.compareTo(LocalTime.of(9, 0)) >= 0&& t.compareTo(LocalTime.of(17, 0)) < 0;};

2.2. Получить финансовый квартал на указанную дату

Мы также можем использовать TemporalQuery для определения текущего финансового квартала года.

В примере ниже первый финансовый квартал рассматривается с января по март. Измените реализацию метода для желаемого поведения.

 LocalDate сегодня = LocalDate.now();System.out.println("Текущий финансовый квартал :: " + today.query(CurrentQuarterQuery));private static final TemporalQuery<Integer> CurrentQuarterQuery = temporal -> {LocalDate дата = LocalDate.from(временная);вернуть(date.getMonthValue() / 3) + 1;};

3. Заключение

В этом уроке мы узнали об интерфейсе TemporalQuery и о том, как использовать его для запроса временных объектов в сложных случаях использования.

Исходный код Скачать

Прокрутить вверх