📜  Java中的 LocalTime query() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:01:54.876000             🧑  作者: Mango

Java中的 LocalTime query() 方法及示例

在Java中,LocalTime类表示不带时区的时间。在本文中,我们将介绍LocalTime类中的query()方法,并提供相应的示例。

什么是query()方法?

query()方法允许我们通过提供一个TemporalQuery接口的实例来查询与时区无关的日期时间对象。这个接口只有一个方法,即queryFrom(TemporalAccessor temporal),该方法可以从提供的TemporalAccessor对象中获取所需的信息并返回结果。

返回值

query()方法返回可序列化对象,允许实现者选择任何元数据来表示该查询的结果。有时返回值类型具有自然顺序,例如LocalDate类中的DayOfWeek枚举。在LocalTime类中,query()方法返回的结果可能是任何类型,具体取决于我们如何实现TemporalQuery接口。

示例

假定我们需要获取二十四小时制时间表示的小时数,并将其转换为字符串。我们可以创建一个TemporalQuery接口的实例,并实现queryFrom(TemporalAccessor temporal)方法来获取该小时数,并返回字符串形式的值。

import java.time.LocalTime;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalQuery;

public class HourOfDayQuery implements TemporalQuery<String> {
    
    @Override
    public String queryFrom(TemporalAccessor temporal) {
        int hour = temporal.get(LocalTime.HOUR_OF_DAY);
        return String.format("%02d", hour);
    }
}

在上面的代码中,我们实现了一个名为HourOfDayQueryTemporalQuery接口的实例,并使用queryFrom(TemporalAccessor temporal)方法返回指定日期时间对象的小时数。

我们可以在LocalTime实例上调用该方法,并传入上述实现的查询实例。

import java.time.LocalTime;

public class Main {
    
    public static void main(String[] args) {
        LocalTime localTime = LocalTime.now();
        HourOfDayQuery hourOfDayQuery = new HourOfDayQuery();
        String hour = localTime.query(hourOfDayQuery);
        System.out.println("Hour of the day: " + hour);
    }
}

以上代码输出当前时间的小时数(24小时制)。

Hour of the day: 16

我们还可以尝试实现多个查询实例,并将它们组合到一个更复杂的查询中。

import java.time.LocalTime;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalQuery;

public class HourMinuteSecondQuery implements TemporalQuery<String> {

    private final String separator;

    public HourMinuteSecondQuery(String separator) {
        this.separator = separator;
    }
    
    @Override
    public String queryFrom(TemporalAccessor temporal) {
        int hour = temporal.get(LocalTime.HOUR_OF_DAY);
        int minute = temporal.get(LocalTime.MINUTE);
        int second = temporal.get(LocalTime.SECOND);
        return String.format("%02d%s%02d%s%02d", hour, separator, minute, separator, second);
    }
}

在上面的代码中,我们创建了一个名为HourMinuteSecondQuery的查询实例,并在构造函数中使用分隔符字符串进行初始化。该实例将返回指定日期时间对象的小时、分钟和秒数,并使用分隔符字符串将它们组合在一起。

我们可以在LocalTime实例上调用该方法,并传入上述实现的查询实例。

import java.time.LocalTime;

public class Main {
    
    public static void main(String[] args) {
        LocalTime localTime = LocalTime.now();
        HourMinuteSecondQuery hourMinuteSecondQuery = new HourMinuteSecondQuery(":");
        String time = localTime.query(hourMinuteSecondQuery);
        System.out.println("Time: " + time);
    }
}

以上代码输出当前时间的小时数、分钟数和秒数(24小时制)。

Time: 16:36:28

这就是Java中LocalTime类中的query()方法及相应示例。我们可以使用这个方法来获取不同的日期时间信息,只需实现相应的查询接口即可。