多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java 8 – `TemporalQuery` > 原文: [https://howtodoinjava.com/java/date-time/temporalquery/](https://howtodoinjava.com/java/date-time/temporalquery/) `TemporalQuery`是查询临时对象以制定更好的业务决策的标准方法。 在 [Java 8](https://howtodoinjava.com/java-8-tutorial/) 中,所有主要的日期时间类都实现了`Temporal`和`TemporalAccessor`接口,因此`TemporalQuery`可以针对所有这些 Java 类运行。 ## 1\. `TemporalQuery`接口 [`TemporalQuery`](https://docs.oracle.com/javase/8/docs/api/java/time/temporal/TemporalQuery.html)是一个函数式接口,因此可以用作 [lambda 表达式](https://howtodoinjava.com/java8/lambda-expressions/)或[方法参考](https://howtodoinjava.com/java8/lambda-method-references-example/)的分配目标。 方法`queryForm()`使用时间对象查询并返回查询的值。 该实现定义查询的逻辑,并负责记录该逻辑。 它可以使用`TemporalAccessor`上的任何方法来确定结果。 输入对象不得更改。 ```java @FunctionalInterface public interface TemporalQuery<R> { R queryFrom(TemporalAccessor temporal); } ``` ## 2\. `TemporalQuery`示例 让我们看一些示例,以更好地了解此接口。 #### 2.1 给定的时间在营业时间内? 我们可以使用`TemporalQuery`确定任何给定时间是否在一定范围内。 例如。 时间是否介于工作时间之间。 ```java LocalTime now = LocalTime.now(); System.out.println("Currently Working :: " + now.query(WorkingHoursQuery)); private static final TemporalQuery<Boolean> WorkingHoursQuery = temporal -> { LocalTime t = LocalTime.from(temporal); return t.compareTo(LocalTime.of(9, 0)) >= 0 && t.compareTo(LocalTime.of(17, 0)) < 0; }; ``` 程序输出: ```java Currently Working :: false ``` #### 2.2 获取当前财务季度 我们还可以使用`TemporalQuery`确定该年度的当前财务季度。 在下面的示例中,第一个财政季度被认为是从一月到三月。 更改方法实现以实现所需的行为。 ```java LocalDate today = LocalDate.now(); System.out.println("Current Financial Quarter :: " + today.query(CurrentQuarterQuery)); private static final TemporalQuery<Integer> CurrentQuarterQuery = temporal -> { LocalDate date = LocalDate.from(temporal); return (date.getMonthValue() / 3) + 1; }; ``` 程序输出: ```java Current Financial Quarter :: 2 ``` 请向我发送在 Java 8 中使用带有日期的`TemporalQuery`的有关问题。 学习愉快! [下载源码](https://github.com/lokeshgupta1981/Core-Java/tree/master/src/com/howtodoinjava/core/datetime)