2021-04-18 11:35  阅读(75)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-date-time-methods.html

Java日期时间查询

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

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

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

TemporalQuery<R>接口表示一个查询。

所有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<TemporalUnit> precisionQuery = TemporalQueries.precision();
        TemporalQuery<LocalDate> 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);
    
      }
    }
    

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

2021041811315_1.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<Boolean> {
      @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;
      }
    }
    

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

2021041811314_2.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;
      }
    }
    

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

2021041811314_3.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 日期时间查询
上一篇
Java 日期时间调整器
下一篇
Java 非ISO日历系统