技术经验|Java基础之LocalTime类

news2025/1/15 17:27:57

文章目录

  • 1 背景
  • 2 Time包在实际开发中的位置
  • 3 本地日期和时间类
    • 3.1 LocalTime自带功能
    • 3.2 LocalTime继承、重写功能
  • 4 总结


📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🔥 三连支持:如果此文还不错的话,还请 ❤️关注、👍点赞、👉收藏三连,支持一下博主~


1 背景

Java里的日期和时间格式化问题,在JDK8(Java SE Development Kit8,以下使用过程中,均称为JDK1.8或者JDK8)以前有很多问题,例如日期类并不提供国际化,没有时区支持,包分配的也比较混乱。所以在JDK8后进行了大改造,索性在rt.jar中新增了一个time包,这样我们就可以个性化设置日期时间的展示方式了。

目前JDK已经到达了JDK 21(Java Development Kit 21),但是在主流的市场上面,使用JDK8的居多。我们现在已经掌握了不少关于日期和时间的操作技巧,但其实随着时间的不断推移,现实的需求也在不断更新,原先的一些API已经难以满足开发需求了。所以从JDK 8之后,为了满足更多的开发需求,Java给我们增加了不少关于日期时间的新特性,接下来本篇文章就带各位来看看这些新特性有哪些。

其他的就不在介绍那么多了,相关的介绍可以参考上一篇文章:Java基础学习|学JDK8中的时间类LocalDate。其实三个日期、时间类都是在一起:LocalDate、LocalTime、LocalDateTime,主要是需要先了解前两个,但是我们在实际使用过程中,LocalDate和LocalDateTime却是使用频率最高,也是最长使用的两个类。

2 Time包在实际开发中的位置

Time API是一组对日期和时间的最重要方面进行建模的包。java. time包中的核心类使用ISO-8601中定义的日历系统(基于公历系统)作为默认日历。当我们引入JDK8后,可以在rt.jar中的java.time目录下找到对应的基础API,打开可以看到有很多新引入的包和类。功能虽多,但是常用的也就是那么几个,所以你想要尽快熟悉,可以自行点击进去查阅。
在这里插入图片描述

3 本地日期和时间类

3.1 LocalTime自带功能

API说明,LocalTime自己的方法或功能没有多少,多数都是实现了Temporal, TemporalAdjuster, ChronoLocalDate这三个类。

测试代码如下:

public static void main(String[] args) {

        System.out.println("-- LocalTime自带API功能");
        // 当前时间(包括毫秒),不可修改的静态信息
        System.out.println("LocalTime.now() = " + LocalTime.now());
        // 衍生出来两个方法,其中一个是从时区获取当前时间,另外一个是从从时钟方式获取,这个同LocalDate有相同功能
        System.out.println("LocalTime.now(ZoneId.of('Asia/Shanghai')) = " + LocalTime.now(ZoneId.of("Asia/Shanghai")));

        // 获取一个设定日期,如果小时设置不在有效范围内,则会被提示:Invalid value for HourOfDay (valid values 0 - 23): 2023,其他参数一样。当然如果只是设置到分钟也是可以支撑,最多可以设置到毫秒
        System.out.println("LocalTime.of(19, 11, 12) = " + LocalTime.of(19, 11, 12));
        // ofXXX,获取,创建一个表示几点几分的时间对象,例如我想获取时间为早上八点半(8:30),范围[0, 24 * 60 * 60 - 1]。
        System.out.println("LocalTime.ofSecondOfDay(8 * 60 * 60 + 30 * 60)) = " + LocalTime.ofSecondOfDay(8 * 60 * 60 + 30 * 60));
}

此处需要注意:

(1)ofSecondOfDay方法不考虑时区信息,因此它返回的时间表示是相对于协调世界时(UTC)的。如果你需要考虑特定时区的时间,请使用 ZonedDateTime 类或 OffsetDateTime 类来代替。

打印结果如下:
在这里插入图片描述

3.2 LocalTime继承、重写功能

这一块的内容同LocalDate差不多,有几处需要注意的,例如LocalTime中没有继承lengXXX这种类型的函数,也没有周期性的类参数设置,而是改为了期间类的函数。

    public static void main(String[] args) {

		System.out.println("-- LocalTime继承重写API功能");
        // getXXX函数,获取当前时间的 时、分、秒、毫秒
        System.out.println("LocalTime.now().getHour() = " + LocalTime.now().getHour());
        System.out.println("LocalTime.now().getMinute() = " + LocalTime.now().getMinute());
        System.out.println("LocalTime.now().getSecond() = " + LocalTime.now().getSecond());
        System.out.println("LocalTime.now().getNano() = " + LocalTime.now().getNano());

        // withXXX函数,with函数就是修改,具体修改的位置在前,参数放在最后。如下:
        System.out.println("LocalTime.now().with(ChronoField.HOUR_OF_DAY, 1) = " + LocalTime.now().with(ChronoField.HOUR_OF_DAY, 1));
        System.out.println("LocalTime.now().with(ChronoField.MINUTE_OF_DAY, 1) = " + LocalTime.now().with(ChronoField.MINUTE_OF_DAY, 1));
        System.out.println("LocalTime.now().with(ChronoField.SECOND_OF_DAY, 1) = " + LocalTime.now().with(ChronoField.SECOND_OF_DAY, 1));

        System.out.println("LocalTime.now().with(ChronoField.MINUTE_OF_HOUR, 1) = " + LocalTime.now().with(ChronoField.MINUTE_OF_HOUR, 1));
        System.out.println("LocalTime.now().with(ChronoField.SECOND_OF_MINUTE, 1) = " + LocalTime.now().with(ChronoField.SECOND_OF_MINUTE, 1));

        System.out.println("LocalTime.now().with(ChronoField.HOUR_OF_AMPM, 1) = " + LocalTime.now().with(ChronoField.HOUR_OF_AMPM, 1));
        System.out.println("LocalTime.now().with(ChronoField.SECOND_OF_MINUTE, 1) = " + LocalTime.now().with(ChronoField.SECOND_OF_MINUTE, 1));

        // 也可以直接修改,等同于LocalTime.now().with(ChronoField.HOUR_OF_DAY, 2),如:
        System.out.println("LocalTime.now().withHour(2) = " + LocalTime.now().withHour(2));

        // 对比日期,时间也有加减,主要有两种类型。
        // 方式一 增加量那个小时、分、秒、毫秒等
        System.out.println("LocalTime.now().plusHours(2) = " + LocalTime.now().plusHours(2));
        // 方式二 增加10分钟,此处需要注意,在LocalDate中,我们使用Period这个类,而在此处需要使用Duration,至于是什么原因,我个人感觉应该使用频率的问题。大家可以各抒己见。
        System.out.println("LocalTime.now().plusDays(3) = " + LocalTime.now().plus(10, ChronoUnit.MINUTES));
        System.out.println("LocalTime.now().plus(Period.ofDays(1)) = " + LocalTime.now().plus(Duration.ofMinutes(20)));

        // isXXX函数
        // 当前日期是否在指定日期之前/之后
        System.out.println("LocalTime.now().isBefore(LocalTime.now().minusHours(1)) = " + LocalTime.now().isBefore(LocalTime.now().minusHours(1)));
        System.out.println("LocalTime.now().isAfter(LocalTime.now().minusHours(1)) = " + LocalTime.now().isAfter(LocalTime.now().minusHours(1)));
    }

打印结果如下:
在这里插入图片描述

4 总结

在JDK8之前我们都是使用Date或者Calendar来做计算或者转换,自从有了JDK8,我们的CVX速度很明显增强了。JDK8引入了许多新的特性和改进,使得代码编写更加简洁、可读性更高,并且提供了更好的性能和并发处理能力。

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

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

相关文章

【Java系列】多线程案例学习——基于阻塞队列实现生产者消费者模型

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得,欢迎大家在评论区交流讨论💌 目录…

九九乘法表c 语言 用于打印九九乘法表

以下是一个简单的C语言程序&#xff0c;用于打印九九乘法表&#xff1a; #include <stdio.h>int main() {int i, j;for (i 1; i < 9; i) {for (j 1; j < i; j) {printf("%d*%d%-2d ", j, i, i*j);}printf("\n");}return 0; }解释&#xff1…

GBASE南大通用GBaseCommand 类

代表一个要对 GBASE南大通用数据库执行操作的 SQL 语句。这个类不能被继承。对 于该类所有成员的列表&#xff0c;参考 GBASE南大通用 GBaseCommand 成员。  继承层次 System.Object |__ System.MarshalByRefObject |__ System.ComponentModel.Component |__ System.D…

go语言,ent库与gorm库,插入一条null值的time数据

情景介绍 使用go语言&#xff0c;我需要保存xxxTime的字段至数据库中&#xff0c;这个字段可能为空&#xff0c;也可能是一段时间。我采取的是统一先赋值为空&#xff0c;若有需要&#xff0c;则再进行插入&#xff08;需要根据另一个字段判断是否插入&#xff09; 在我的数据…

‘>>’,‘<<’和‘’的使用

>>: n n >> 1 是使用位移运算符将 n 向右移动一位的操作。在 C 语言中&#xff0c;>> 是右移位运算符&#xff0c;表示将二进制数向右移动指定的位数。 对于无符号整数&#xff0c;在右移位操作时&#xff0c;高位用 0 填充。例如&#xff0c;如果 n 的二…

Navicat导入与导出表的操作流程

我们使用Navicat时&#xff0c;创建表有两种方法&#xff0c;一种是写SQL语句&#xff0c;这种方法适合数据较少的表&#xff1b;另一种是通过“导入向导”功能导入表&#xff0c;这种方法可以一次性导入大批量的数据&#xff0c;提高效率。 下面我以.xls格式为例&#xff0c;…

程序员的浪漫,2023跨年烟花代码(Python)

跨年倒计时啦 今天分享用python实现一场烟花秀 感兴趣的小伙伴&#xff0c;提前收藏起来&#xff0c;一定要看到最后&#xff01; 话不多说 1.首先制作一个绚丽的夜空 制作夜空&#xff0c;其实就是设置画布。大家知道&#xff0c;夜晚的天空月明如水&#xff0c;星光攒动&a…

创建型设计模式 - 抽象工厂模式 - JAVA

创建型设计模式 - 抽象工厂设计模式 一. 简介二. 列子2.1 定义电脑的抽象类和子类2.2 定义抽象工厂类和其实现类2.3 测试 三. 抽象工厂设计模式的好处四. 抽象工厂模式的案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续…

git 如何将某个分支的某个提交复制到另外一个分支

请直接去看原文: 原文链接:git 如何将某个分支的某个提交复制到另外一个分支_gitlab里面的markdown文件可以复用其他分支的吗-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------…

drf知识-08

Django之了解DRF框架 # 介绍&#xff1a;DRF全称 django rest framework # 背景&#xff1a; 在序列化与反序列化时&#xff0c;虽然操作的数据不尽相同&#xff0c;但是执行的过程却是相似的&#xff0c;也就是说这部分代码是可以复用简化编写的 增&#xff1a;校验请…

leaflet学习笔记-地图图层控制(二)

图层介绍 Leaflet的地图图层控件可控制两类图层&#xff1a;一类是底图图层&#xff08;Base Layers&#xff09;&#xff0c;一次只能选择一个图层作为地图的背景图层&#xff0c;即底图图层&#xff0c;在地图图层控件中用单选按钮控制&#xff1b;另一类是覆盖图层&#xff…

目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现

前言 损失函数是用来评价模型的预测值和真实值一致程度&#xff0c;损失函数越小&#xff0c;通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段&#xff0c;如果我们想让预测值无限接近于真实值&#xff0c;就需要将损失值降到最低…

Ubuntu18.04安装GTSAM库并验证GTSAM是否安装成功(亲测可用)

在SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;和SFM&#xff08;Structure from Motion&#xff09;这些复杂的估计问题中&#xff0c;因子图算法以其高效和灵活性而脱颖而出&#xff0c;成为图模型领域的核心技术。GTSAM&#xff08;Georgia Tech Smo…

【论文阅读】Resource Allocation for Text Semantic Communications

这是一篇关于语义通信中资源分配的论文。全文共5页&#xff0c;篇幅较短。 目录在这里 摘要关键字引言语义通信资源分配贡献公式符号 系统模型DeepSC TransmitterTransmission ModelDeepSC Receiver 语义感知资源分配策略Semantic Spectral Efficiency &#xff08;S-SE&#…

Docker七 | 搭建Swarm集群

目录 创建Swarm集群 创建管理节点 增加工作节点 查看集群 部署服务 新建服务 查看服务 服务伸缩 增加服务 减少服务 删除服务 创建Swarm集群 创建管理节点 在192.168.117.131下执行docker swarm init命令的节点自动成为管理节点 [rootlocalhost ~]# docker swar…

idea中切换JDK8、JDK11、JDK17

有时候&#xff0c;我们可能需要在不同的Java版本中去测试或者查看源码&#xff0c;idea可以让我们修改Java的版本。 前提&#xff1a;你必须下载安装好对应的Java版本&#xff0c;可参考文章【windows下切换JDK8、JDK11、JDK17】&#xff08;https://blog.csdn.net/xijinno1/a…

深度学习核心技术与实践之深度学习基础篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分 神经网络 生物神经元的特点 &#xff08;1&#xff09;人体各种神经元本身的构成很相似 &#xff08;2&#xff09;早期的大脑损伤&#xff0c;其功能可能是以其他部位的神经元来代替实现的 &#xff08;3&#x…

腾讯云服务器怎么买划算?最新优惠价格表

2023腾讯云轻量应用服务器优惠价格表&#xff0c;12月最新报价&#xff0c;腾讯云轻量2核2G3M带宽62元一年、2核2G4M轻量服务器118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元三年、4核8G12M轻量服务器646元15个月&#xff0c;CVM云服务器S5实例2核2G…

C# 常用数据类型及取值范围

1.常见数据类型和取值范围 序号数据类型占字节数取值范围1byte10 到 2552sbyte1-128 到 1273short 2-32,768 到 32,7674ushort20 到 65,5355int4-2,147,483,648 到 2,147,483,6476uint40 到 4,294,967,2957float41.5 x 10−45 至 3.4 x 10388double85.0 10−324 到 1.…

15种线上Bug梳理,这坑我算是踩全了

日常开发过程中大家肯定或多或少都会遇到一些偶现的问题&#xff0c;最常见的一句话就是&#xff1a;在我本地运行的时候都是好的呀&#xff1f;在测试环境跑的时候都是好的呀&#xff1f;在预发布环境都是正常的呀&#xff1f;在灰度阶段都是没问题的呀&#xff1f; 怎么到生…