java时间查询_Java 日期时间查询

Java日期时间查询

所有datetime类都支持查询,查询是对信息的请求。

我们可以从datetime对象获取日期时间组件,例如,我们可以从LocalDate获取年份。

查询请求不可用作组件的信息。 例如,我们可以查询LocalDate以查看它是否为星期一。 查询的结果可以是任何类型。

TemporalQuery接口表示一个查询。

所有datetime类都有一个query()方法,TemporalQuery作为参数。

TemporalQueries类包含几个预定义的查询。

如果datetime对象没有查询请求的信息,该查询返回null。

以下代码显示如何使用预定义的查询。import java.time.LocalDate;

import java.time.LocalTime;

import java.time.ZonedDateTime;

import java.time.temporal.TemporalQueries;

import java.time.temporal.TemporalQuery;

import java.time.temporal.TemporalUnit;

public class Main {

public static void main(String[] args) {

TemporalQuery precisionQuery = TemporalQueries.precision();

TemporalQuery localDateQuery = TemporalQueries.localDate();

// Query a LocalDate LocalDate ld = LocalDate.now();

TemporalUnit precision = ld.query(precisionQuery);

LocalDate queryDate = ld.query(localDateQuery);

System.out.println("Precision of LocalDate: " + precision);

System.out.println("LocalDate of LocalDate: " + queryDate);

// Query a LocalTime LocalTime lt = LocalTime.now();

precision = lt.query(precisionQuery);

queryDate = lt.query(localDateQuery);

System.out.println("Precision of LocalTime: " + precision);

System.out.println("LocalDate of LocalTime: " + queryDate);

// Query a ZonedDateTime ZonedDateTime zdt = ZonedDateTime.now();

precision = zdt.query(precisionQuery);

queryDate = zdt.query(localDateQuery);

System.out.println("Precision of ZonedDateTime: " + precision);

System.out.println("LocalDate of ZonedDateTime: " + queryDate);

}

}

上面的代码生成以下结果。

5c04270b847f3f1732b2ee1eb634f187.png

自定义查询

我们可以通过两种方式创建自定义查询。实现TemporalQuery接口

使用方法引用作为查询。该方法应该接受一个TemporalAccessor并返回一个对象。import java.time.DayOfWeek;

import java.time.LocalDate;

import java.time.temporal.ChronoField;

import java.time.temporal.TemporalAccessor;

import java.time.temporal.TemporalQuery;

public class Main {

public static void main(String[] args) {

LocalDate ld1 = LocalDate.of(2013, 12,1);

Boolean is = ld1.query(new Monday1Query());

System.out.println(is);

}

}

class Monday1Query implements TemporalQuery {

@Override

public Boolean queryFrom(TemporalAccessor temporal) {

if (temporal.isSupported(ChronoField.DAY_OF_MONTH)

&& temporal.isSupported(ChronoField.DAY_OF_WEEK)) {

int dayOfMonth = temporal.get(ChronoField.DAY_OF_MONTH);

int weekDay = temporal.get(ChronoField.DAY_OF_WEEK);

DayOfWeek dayOfWeek = DayOfWeek.of(weekDay);

if (dayOfMonth == 1 && dayOfWeek == DayOfWeek.MONDAY) {

return Boolean.TRUE;

}

}

return Boolean.FALSE;

}

}

上面的代码生成以下结果。

d4f5ddf9e15ad777e4acd828ea3b1b0f.png

例2

以下代码使用方法引用重写上面的代码。import java.time.DayOfWeek;

import java.time.LocalDate;

import java.time.temporal.ChronoField;

import java.time.temporal.TemporalAccessor;

public class Main {

public static void main(String[] args) {

LocalDate ld1 = LocalDate.of(2013, 12, 1);

Boolean is = ld1.query(Main::queryFrom);

System.out.println(is);

}

public static Boolean queryFrom(TemporalAccessor temporal) {

if (temporal.isSupported(ChronoField.DAY_OF_MONTH)

&& temporal.isSupported(ChronoField.DAY_OF_WEEK)) {

int dayOfMonth = temporal.get(ChronoField.DAY_OF_MONTH);

int weekDay = temporal.get(ChronoField.DAY_OF_WEEK);

DayOfWeek dayOfWeek = DayOfWeek.of(weekDay);

if (dayOfMonth == 1 && dayOfWeek == DayOfWeek.MONDAY) {

return Boolean.TRUE;

}

}

return Boolean.FALSE;

}

}

上面的代码生成以下结果。

18a0169a757228fa31e7cfa8b191ec15.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值