📅  最后修改于: 2023-12-03 15:01:54.876000             🧑  作者: Mango
在Java中,LocalTime
类表示不带时区的时间。在本文中,我们将介绍LocalTime
类中的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);
}
}
在上面的代码中,我们实现了一个名为HourOfDayQuery
的TemporalQuery
接口的实例,并使用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()
方法及相应示例。我们可以使用这个方法来获取不同的日期时间信息,只需实现相应的查询接口即可。