深入了解Java8新特性-日期时间API之TemporalQuery、TemporalQueries

news2025/1/22 9:21:26

阅读建议

嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议:

  1. 本篇文章大概2000多字,预计阅读时间长需要5分钟。
  2. 本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章,建议收藏起来,方便时常学习与回顾,温故而知新。
  3. 创作不易,免费的点赞、关注,请走上一走,算是对博主一些鼓励,让我更有动力输出更多的干货内容。

注意

本文编写的单元测试是基于java11,具体的版本号是:11.0.19

TemporalQuery

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

TemporalQuery是Java 8中用于时间查询的一个函数式接口,它允许用户对日期和时间进行查询。TemporalQuery接口中定义了一些方法,比如queryFrom(TemporalAccessor temporal),该方法允许用户从给定的时间对象中查询特定的时间信息。

TemporalAccessor

TemporalAccessor是一个时间访问器,它提供了一些方法来访问时间信息,比如get(ChronoField field),getLong(ChronoField field),query(TemporalQuery query)等。这些方法可以让用户获取到日期和时间的各个部分,比如年、月、日、时、分、秒等。LocalDate、LocalTime、LocalDateTime都是TemporalAccessor的实现在类。通过TemporalQuery和TemporalAccessor接口,用户可以对日期和时间进行更为精细的控制和操作,以满足各种不同的需求。

TemporalQueries

TemporalQueries是Java中用于时间查询的类,它提供了TemporalQuery的常见实现。此类允许根据策略设计模式采用不同的方法,从临时对象中提取信息的关键工具。

TemporalQueries类中定义了一些方法,比如:

  • static TemporalQuery localDate():查询LocalDate,如果找不到则返回null。
  • static TemporalQuery localTime():查询LocalTime,如果找不到则返回null。
  • static TemporalQuery offset():查询ZoneOffset,如果找不到则返回null。

这些方法可以用于查询时间信息,比如日期、时间、时区偏移量等。通过TemporalQueries类,用户可以更加方便地进行时间查询操作。

TemporalQuery、TemporalQueries使用示例

这里ZonedDateTime为例,先获取一下当前的日期时间的ZonedDateTime实例,如果我想获取一下这个日期时间对象时区的ZoneId,需要怎么办呢?可以这样

@Test
public void test(){
    ZonedDateTime zonedDateTime=ZonedDateTime.now();
    TemporalQuery<ZoneId> temporalQuery = TemporalQueries.zoneId();
    ZoneId zoneId = zonedDateTime.query(temporalQuery);
    System.out.println(zoneId);//输出结果:Asia/Shanghai
}

如果还想从ZonedDateTime实例中获取一下LocalDate、LocalTime、ZoneOffset对象,怎么办呢?可以这样:

@Test
public void test(){
    ZonedDateTime zonedDateTime=ZonedDateTime.now();
    TemporalQuery<ZoneOffset> temporalQuery1 = TemporalQueries.offset();
    ZoneOffset zoneOffset = zonedDateTime.query(temporalQuery1);
    System.out.println(zoneOffset);//输出结果:+08:00
    TemporalQuery<LocalDate> temporalQuery2 = TemporalQueries.localDate();
    LocalDate localDate = zonedDateTime.query(temporalQuery2);
    System.out.println(localDate);//输出结果:2023-11-29
    TemporalQuery<LocalTime> temporalQuery3 = TemporalQueries.localTime();
    LocalTime localTime = zonedDateTime.query(temporalQuery3);
    System.out.println(localTime);//输出结果:18:10:40.622423500
}

如果还想从ZonedDateTime实例中获取的目标对象不存在,会异常吗?当然不会,而是会返回null

@Test
public void test2(){
    TemporalQuery<ZoneOffset> offset = TemporalQueries.offset();
    LocalDateTime localDateTime=LocalDateTime.now();//本地日期时间是不带时区偏移量的
    ZoneOffset query = localDateTime.query(offset);//肯定查询不到结果
    System.out.println(query);//输出结果:null
}

总结

TemporalQueries和TemporalQuery是Java时间库中的两个相关类,它们都用于处理时间查询。

TemporalQueries是一个类,它提供了TemporalQuery的常见实现。这些实现是常量,因为lambda表达式不能保证这一点。通过在这里分配一次,它们变成了“普通的”Java常量。

TemporalQuery是一个接口,它定义了从临时对象中提取信息的关键工具。这些工具的存在是为了使查询过程外化,允许根据策略设计模式采用不同的方法。例如,可以查询日期是否是闰年2月29日前一天的查询,或计算下一个生日的天数。

因此,TemporalQueries和TemporalQuery之间的关系是它们一起提供了一种机制来执行时间查询。TemporalQueries提供了常见的查询实现,而TemporalQuery定义了查询的通用接口。

读到这,TemporalQuery、TemporalQueries之间是什么关系?怎么使用?你明白了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1268685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全 | 使用人工智能阻止网络攻击

全球范围内分布式拒绝服务 (DDoS) 网络攻击急剧增加&#xff0c;这种数字攻击可以通过大量的互联网流量压垮目标服务器&#xff0c;从而使网站瘫痪。这种攻击每年都会发生数百万起&#xff0c;而且数量和规模都在不断增加。大约三分之一的网站宕机是由于 DDoS 攻击所致。 计算…

UVA 108 Maximum Sum

UVA 108 Maximum Sum 题面翻译 给定一个含有正负数的二维数组&#xff0c;找出有最大和的子矩阵。矩阵的和指矩阵中所有元素的和。 一个子矩阵是任意在总矩阵中大小为1x1或更大的邻近子数组&#xff0c;例如在下面的矩阵中: 0 −2 −7 0 9 2 −6 2 −4 1 −4 1 −1 8 0 −…

C++学习寄录(八.继承)

继承的语法&#xff1a;class 子类 : 继承方式 父类 class A : public B; A 类称为子类 或 派生类 B 类称为父类 或 基类 1.基本使用 未使用继承的代码比较冗余重复 #include <iostream> #include <fstream> #include <string> #include <chrono>…

搞定这三个问题 伦敦金止损就没问题

笔者多次强调&#xff0c;做伦敦金交易&#xff0c;重要的是风险控制。而止损是我们风险控制中一个很重要的概念。设定好止损&#xff0c;就是风险控制的好开始。下面我们通过三个问题&#xff0c;来解决止损的问题。 问题一&#xff0c;你的止损位在哪里&#xff1f;要做止损&…

python -- python安装

1、python的诞生和发展&#xff1a; python语言是一种解释型、面向对象型、动态数据类型的高级程序设计语言。 2、python的安装&#xff1a; 1、安装解析器&#xff1a; 在安装的过程中需要注意的是&#xff1a; 在安装pycharm的时候也是同样的道理&#xff0c;需要指定安装…

解决:IDEA的debug模式只有第一次能拦截请求进行debug,后续所有请求全部失效

解决&#xff1a;IDEA的debug模式只有第一次能拦截请求进行debug&#xff0c;后续所有请求全部失效 一问题描述&#xff1a;IDEA的debug模式只有第一次能拦截请求进行debug&#xff0c;后续所有请求全部失效二问题原因&#xff1a;对IDEA的debug功能不熟悉或者理解有偏差三解决…

vs配置64位汇编

vs开发64位程序无法使用内联汇编&#xff0c;需要将汇编放到一个单独文件中编译链接。 步骤如下&#xff1a; 生成汇编代码。以asm.asm为例&#xff0c;以下是模板&#xff1a; ;64位汇编程序模板 (Template) ;声明一个ExitProcess函数 ExitProcess PROTO.data;在这里声明变量…

外汇天眼:外汇市场中的“双向交易”是什么意思?

说到外汇市场&#xff0c;总免不了提到它双向交易的优势&#xff0c;很多新手会对这一点有所疑问&#xff0c;今天我们就帮大家解决这一个疑问。 何谓双向交易&#xff1f; 金融市场上&#xff0c;交易者最常接触到的股票&#xff0c;多属于单向交易。 单向交易的模式便是「先…

如何快速生成项目目录结构树?

经常在网上看到下面这种由一个项目&#xff0c;生成一个结构树&#xff0c;你知道它是怎么生成的吗&#xff1f; 这就是利用本文要介绍的一个工具——Treer&#xff0c;treer就是一款专门用来快速生成目录结构树的命令行工具。 第一步&#xff1a;安装treer 在终端执行全局…

分布式机器学习、联邦学习、多智能体的区别和联系——一文进行详细解释

1 分布式机器学习、联邦学习、多智能体介绍 最近这三个方面的论文都读过&#xff0c;这里写一篇博客归纳一下&#xff0c;以方便搞这几个领域的其他童鞋入门。我们先来介绍以下这三种机器学习范式的基本概念。 1.1 分布式机器学习介绍 分布式机器学习(distributed machine l…

vivado综合分析与收敛技巧3

1、最优化 RAMB 输入逻辑以允许输出寄存器推断 以下 RTL 代码片段可从块 RAM &#xff08; 实际上为 ROM &#xff09; 生成关键路径 &#xff0c; 其中包含多个止于触发器 (FF) 的逻辑层次。 RAMB单元已在无可选输出寄存器 (DOA-0) 的情况下完成推断 &#xff0c; 这给 R…

美颜SDK是什么?美颜SDK对比测评

为了实现实时、高效的美颜效果&#xff0c;开发者们纷纷转向美颜SDK这一技术解决方案。那么&#xff0c;美颜SDK究竟是什么&#xff1f;本文将深入探讨美颜SDK的概念&#xff0c;并通过对比测评不同美颜SDK&#xff0c;为开发者和用户提供更清晰的选择参考。 一、美颜SDK的概念…

高效管理文件方法:根据文件大小智能移动至目标文件夹

在日常的工作中&#xff0c;会遇到大量的文件&#xff0c;从几个KB的小文档到几个GB的大数据文件。如何有效地管理这些文件&#xff0c;以便能够快速找到所需的资料&#xff0c;是一项重要的任务。传统的文件管理方式往往会在大量的文件和文件夹中迷失&#xff0c;而无法快速找…

SAP 第三方销售

SAP 第三方销售 第三方销售是比较常见的业务&#xff0c;&#xff0c;虽然他的一部分属于SD模块&#xff0c;但配置也并不难&#xff0c;一起测试下。 1、流程概述 第三方采购指的是&#xff1a;公司A和客户B签订销售合同&#xff0c;公司在SAP 系统内开销售订单&#xff0c…

temu反洗钱协议在哪里签署

反洗钱是国际社会关注的重要议题之一。为了加强国际合作&#xff0c;各国政府积极参与签署反洗钱协议。TEMU反洗钱协议作为国际间的重要合作框架&#xff0c;其签署地点及其意义备受关注。本文将深入探讨TEMU反洗钱协议的签署地点及其背后的意义。 先给大家推荐一款拼多多/temu…

顶级大厂Quora如何优化数据库性能?

Quora 的流量涉及大量阅读而非写入&#xff0c;一直致力于优化读和数据量而非写。 0 数据库负载的主要部分 读取数据量写入 1 优化读取 1.1 不同类型的读需要不同优化 ① 复杂查询&#xff0c;如连接、聚合等 在查询计数已成为问题的情况下&#xff0c;它们在另一个表中构…

代理模式,dk动态代理,cglib动态代理

目录 一、代理模式1、生活中代理案例2、为什么要使用代理3、代理模式在Java中的应用4、什么是代理模式 二、代理的实现方式1、java中代理图示2、静态代理 三、动态代理1、概述2、JDK动态代理jdk动态代理原理分析 3、Cglib动态代理3.1 基本使用3.2 cglib基本原理 一、代理模式 …

【长文干货】Python可视化教程

文章目录 数据介绍Matplotlib散点图折线图柱形图直方图 Seaborn散点图折线图柱形图直方图 Bokeh散点图折线条形图交互式 Plotly基本组合优化&#xff1a;定制化下拉菜单 总结 数据介绍 在这个小费数据集中&#xff0c;我们记录了20世纪90年代初期餐厅顾客在两个半月内给出的小…

基于SSM框架的图书馆管理系统设计与实现

基于SSM框架的图书馆管理系统 摘要&#xff1a;在21信息时代中&#xff0c;编程技术的日益成熟&#xff0c;计算机已经是普通使用的。编程技术的实现是基于计算机硬件上&#xff0c;计算机科学与技术的进步&#xff0c;让时代发展的更快&#xff0c;更加信息化。人们都是学习如…

Http协议(Hyper Text Transfer Protocol)

Http协议(Hyper Text Transfer Protocol) 这是一种超文本传输协议&#xff0c;规定了浏览器与服务器中间数据传输的规则 特点&#xff1a; 基于TCP协议&#xff1a;面向连接&#xff0c;安全基于请求-响应模型&#xff1a;一次请求对应一次响应http协议是无状态的协议&#…