Java 8 – TemporalQuery

Java 8 – TemporalQuery

原文: https://howtodoinjava.com/java/date-time/temporalquery/

TemporalQuery是查询临时对象以制定更好的业务决策的标准方法。 在 Java 8 中,所有主要的日期时间类都实现了TemporalTemporalAccessor接口,因此TemporalQuery可以针对所有这些 Java 类运行。

1. TemporalQuery接口

TemporalQuery是一个函数式接口,因此可以用作 lambda 表达式方法参考的分配目标。 方法queryForm()使用时间对象查询并返回查询的值。

该实现定义查询的逻辑,并负责记录该逻辑。 它可以使用TemporalAccessor上的任何方法来确定结果。

输入对象不得更改。

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

2. TemporalQuery示例

让我们看一些示例,以更好地了解此接口。

2.1 给定的时间在营业时间内?

我们可以使用TemporalQuery确定任何给定时间是否在一定范围内。 例如。 时间是否介于工作时间之间。

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;
};

程序输出:

Currently Working :: false

2.2 获取当前财务季度

我们还可以使用TemporalQuery确定该年度的当前财务季度。 在下面的示例中,第一个财政季度被认为是从一月到三月。 更改方法实现以实现所需的行为。

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;
};

程序输出:

Current Financial Quarter :: 2

请向我发送在 Java 8 中使用带有日期的TemporalQuery的有关问题。

学习愉快!

下载源码