深入了解Java8新特性-日期时间API

news2024/9/23 9:29:38

阅读建议

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

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

简单了解一下Java8时间API

        Java 8 引入了新的日期和时间API,它是对旧的java.util.Date和java.util.Calendar类的改进,新的时间API在java.time包下,也称为Java时间API,它提供了更简单、更强大和更灵活的日期和时间处理能力。

Java8时间API有哪些显著的特点

        新的时日期和时间的API有一些非常显著的特点:

  • 不可变性:Java 8的时间API中的类是不可变的,这意味着一旦创建了实例,就不能更改其值。这种不可变性有助于避免错误和简化代码。
  • 链式调用:Java 8的时间API支持链式调用,这使得代码更加简洁和易于阅读。
  • 时区和区域设置:Java 8的时间API提供了更精细的时区和区域设置控制。它包括一系列的类,如ZoneId、ZoneOffset、LocalDateTime、ZonedDateTime等,用于处理时间和时区的问题。
  • 更清晰的日期和时间类型:Java 8的时间API定义了多种日期和时间类型,如LocalDate、LocalTime、LocalDateTime、Year、YearMonth等,每种类型都表示日期和时间的不同方面。
  • 日期和时间的解析和格式化:Java 8的时间API提供了强大的日期和时间解析和格式化功能。例如,你可以很容易地将字符串解析为日期或时间,或者将日期或时间格式化为字符串。
  • 日期和时间的运算:Java 8的时间API支持日期和时间的运算,如添加时间、获取下一个时间等。这对于日程安排、计划和定时任务是非常有用的。
  • 与旧的date/time API的兼容性:Java 8的时间API是向后兼容的,这意味着你可以在使用新的时间API的同时,继续使用旧的java.util.Date和java.util.Calendar类。

Java8时间API包含有哪些核心类

        而这引起非常显著的特点是如何体现的呢?这些显著特点就体现在这些新增的类上:

  • LocalDate, LocalTime, LocalDateTime: 这些类用于表示日期和时间,它们不可变且线程安全。LocalDate 表示日期,LocalTime 表示时间,LocalDateTime 表示日期和时间。
  • ZonedDateTime, OffsetDateTime: 这两个类用于处理具有时区的日期和时间。ZonedDateTime 用于表示具有时区的日期和时间,而 OffsetDateTime 则表示具有偏移量的日期和时间。
  • TemporalAdjusters: 这个类提供了一些静态方法,可以调整日期和时间,例如添加工作日、获取下一个工作日等。
  • TemporalQuery: 这个接口用于定义查询,可以用于从日期时间对象中提取信息,比如年、月、日等。
  • Clock, DateTimeFormatter: Clock 类用于获取当前时间,而 DateTimeFormatter 类则用于日期和时间的格式化和解析。
  • Year, YearMonth, MonthDay, DayOfWeek: 这些类用于表示年份、年份和月份、月份和日期以及星期几。
  • ChronoUnit: 这个类提供了一些时间单位,例如天、小时、分钟等,可以用于进行时间运算。
  • ChronoField: 这个类提供了一些字段,例如年、月、日、时、分、秒等,可以用于获取和设置日期时间的各个部分。
  • Period, Duration: Period 类用于表示两个日期之间的时间间隔,而 Duration 类则用于表示两个时间点之间的间隔。

Java旧的日期时间API与Java8的日期时间API对比

        Java 8的日期时间API相较于旧的日期时间API有显著的变化和改进,提供了更加现代化、灵活和强大的日期和时间处理能力:

  • 新的日期时间API是线程安全的:旧的日期时间API中的大多数类都是可变的,是非线程安全的。而Java 8的日期时间API中的大部分类型都是不可变的,因此是线程安全的。这意味着多个线程可以共享这些类型的实例,而不必担心线程安全问题。
  • 新的日期时间API更加合理和统一:旧的日期时间API在设计上存在很多问题,例如在java.util包中有多个日期类,包括java.util.Date、java.sql.Date等,它们的功能和用法都有所不同。此外,用于格式化和解析的类在java.text包中定义,使用起来不够方便。而Java 8的日期时间API的设计更加合理和统一,引入了LocalDate、LocalTime、LocalDateTime等新的日期时间类型,它们的使用更加简单和直观。
  • 新的日期时间API支持时区处理:旧的日期时间API中没有提供时区支持,因此在进行跨时区的日期和时间处理时会出现问题。而Java 8的日期时间API引入了全球时区支持,并提供了时区转换的功能。时区转换可以通过ZonedDateTime和OffsetDateTime等类型实现。
  • 新的日期时间API支持格式化和解析:Java 8时间API提供了DateTimeFormatter类,用于日期和时间的格式化和解析。DateTimeFormatter类支持多种格式,并可以自定义格式。这使得日期和时间的处理更加灵活和方便。
  • 新的日期时间API支持不可变性和线程安全:Java 8时间API中的大部分类型都是不可变的,因此线程安全。这意味着多个线程可以共享这些类型的实例,而不必担心线程安全问题。

总结

        Java 8时间API提供了更简单、更强大和更灵活的日期和时间处理能力。Java 8之前的日期和时间处理主要依赖于Date和Calendar类,这些类在使用上存在一些不便,例如需要手动进行时区转换,以及对日期的各种操作(如增加天数、获取下一个工作日等)需要编写较复杂的代码。Java 8引入了新的时间API,包括LocalDate、LocalTime、LocalDateTime、ZonedDateTime、Period、Duration、Clock、DateTimeFormatter等类和接口,它们使得处理日期和时间变得更加简单、直观和灵活。

下面将通过几篇文章和大家一块逐个深入了解一下各个时间API类的关键特性:

  • 深入了解Java8新特性-日期时间API_LocalDate类
  • 深入了解Java8新特性-日期时间API:LocalTime类和LocalDateTime类
  • 深入了解Java8新特性-日期时间API:TemporalQuery类和TemporalQueries类
  • 深入了解Java8新特性-日期时间API:TemporalAdjusters类
  • 深入了解Java8新特性-日期时间API:ZonedDateTime类和OffsetDateTime类
  • 深入了解Java8新特性-日期时间API:Clock类和DateTimeFormatter类
  • 深入了解Java8新特性-日期时间API: Year类、YearMonth类、MonthDay类和DayOfWeek类
  • 深入了解Java8新特性-日期时间API:ChronoUnit类和ChronoField类
  • 深入了解Java8新特性-日期时间API:Period类和Duration类

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

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

相关文章

爬虫逆向你应该懂得Javascript知识

背景 大家在学习爬虫逆向的时候,一般都会涉及到对js源文件进行代码扣去,但是有的时候,你最好有js基础,能发现加密或者解密在那个位置,或者是能用python改写js代码,这就对个人的Javascript的能力有一定要求…

【考研数据结构代码题8】三元组表示的稀疏矩阵快速转置

题目:三元组表示的稀疏矩阵快速转置 考点:矩阵的压缩与存储 难度:★★★ 稀疏矩阵压缩存储 三元组结构 //三元组结构 typedef struct {int row;int col;int value; } Term; 核心代码 // 转置函数,a为原矩阵,b存放转…

【灌水】自动跑团机器人

实现一个自动COC跑团机器人 这几天玩博德之门3有点累了 #假如你有一台服务器,你最想做哪些事?# 这他妈是什么idea收集器,你们就是靠这个收集idea吗,那我就说一个绝对不赚钱的了。 简单实现了追书人的基本流程,最后…

iview table 默认排序字段不高亮解决办法

iview treeSelect 组件封装 1、表格增加排序时触发的方法2、定义三个变量,sortColumnDefaultStyle存放默认的样式,定义页面默认的列以及顺序3、显示的列加上 sortable, 和样式4、使用下面这块代表默认选中5、点击时清除掉默认的排序6、把排序的字段查询时…

TensorFlow实战教程(十九)-Keras搭建循环神经网络分类案例及RNN原理详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章分享了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。这篇文章将详细讲解循环神经网络RNN的原理知识,并采用Keras实现手写数字识别的RNN分类案例及可视化呈现。基础性文…

为什么说品牌低价不是一件好事

消费者货比三价为的是买到低价质优的产品,而网络电商平台的公开,也促进了消费者及品牌进行比价,那品牌低价一定就是好事吗,一定会拉高品牌销量吗。其实是不一定的,低价意味着成本的降低,也可能滋生很多产品…

matlab使用scatter函数画图时报错“数组索引必须为正整数或逻辑值”解决办法

一、背景 在使用matlab的scatter函数画图时报错“数组索引必须为正整数或逻辑值”。 scatter函数说明:scatter(x,y) 在向量 x 和 y 指定的位置创建一个包含圆形标记的散点图。 二、解决办法 如果使用scatter函数时报上述错误,尝试将连续函数先转换为函…

Adobe xd有免费版可以使用吗?

Adobexd现在收费了吗?Adobexd是收费的。Adobexd在中国提供个人版和团队版两项收费政策。个人版每月订阅60元,每年订阅688元;团队版每月订阅112元/用户,每年订阅1288元/用户。 虽然AdobeXD的免费计划已经下线,但Adobe仍…

基于动量的梯度下降

丹尼尔林肯 (Daniel Lincoln)在Unsplash上拍摄的照片 一、说明 基于动量的梯度下降是一种梯度下降优化算法变体,它在更新规则中添加了动量项。动量项计算为过去梯度的移动平均值,过去梯度的权重由称为 Beta 的超参数控制。 这有助于解决与普通梯度下降相…

virtualList 封装使用 虚拟列表 列表优化

虚拟列表 列表优化 virtualList 组件封装 virtualList 组件封装 本虚拟列表 要求一次性加载完所有数据 不适合分页 新建一个select.vue 组件页面 <template><div> <el-select transfer"true" :popper-append-to-body"true"popper-class…

Android修行手册-超出父布局进行显示以及超出父布局实现点击

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

ubuntu下docker环境使用GPU配置

本文主要讲述整个命令流程&#xff0c;具体讲解请看官网nvidia-容器工具包和一篇总结得很详细的博文docker使用GPU总结 docker的版本必须安装19.0版本以上的&#xff0c;这里也只讲19.0版本以上的使用方法 首先设置一下网络信息 curl -fsSL https://nvidia.github.io/libnvi…

批量插入SQL 错误 [933] [42000]: ORA-00933: SQL 命令未正确结束

使用DBeaver向【oracle数据库】插入大量数据 INSERT INTO Student(name,sex,age,address,birthday) VALUES(Nike,男,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike…

Visio学习笔记

1. 常用素材 1.1 立方体&#xff1a;张量, tensor 操作路径&#xff1a;更多形状 ⇒ 常规 ⇒ 基本形状 自动配色 在选择【填充】后Visio会自动进行配色&#xff1b;

我劝烂了,这东西大学生早用早解脱

大学生看我&#xff0c;这个东西太太太香了啊&#xff01;&#xff01;&#xff01; 要写论文&#xff0c;写总结的都给我用起来 这东西能自动写文章&#xff0c;想写几篇就写几篇&#xff0c;篇篇不重复&#xff01;只要输入一个标题&#xff0c;马上就能生成一篇。真的贼香…

2023-11-23 LeetCode每日一题(HTML 实体解析器)

2023-11-23每日一题 一、题目编号 1410. HTML 实体解析器二、题目链接 点击跳转到题目位置 三、题目描述 「HTML 实体解析器」 是一种特殊的解析器&#xff0c;它将 HTML 代码作为输入&#xff0c;并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们…

视频去水印软件有哪些?分享四款好用去水印软件

对于从事自媒体的朋友们来说&#xff0c;保护自己的视频作品免受盗用至关重要。为了标识归属&#xff0c;我们通常会在视频上添加水印。然而&#xff0c;当我们在寻找素材并打算进行剪辑时&#xff0c;发现素材上的水印会严重干扰使用。在这种情况下&#xff0c;我们需要采取一…

【Linux】who命令使用

who who命令用于显示系统中有哪些使用者正在上面&#xff0c;显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。 著者 由Joseph Arceneaux、David MacKenzie和Michael Stone撰写。 语法 who [选项] [文件|参数] who命…

第19章JAVA绘图

19.1JAVA绘图类 绘图是高级程序设计中非常重要的技术 19.1.1Graphics类 Graphics类是所有图形上下文的抽象基类&#xff0c;它允许应用程序在组件以及闭屏图片上进行绘制 Graphics类封装了JAVA支持的基本绘图操作所需的状态信息&#xff0c;主要包括颜色&#xff0c;字体&…