Java之时间类2(JDK8新增)
一、Date类
(一)、ZoneId:时区
1、概述
ZoneId是Java 8中处理时区的类。它用于表示时区标识符,例如“America/New_York”或“Asia/Tokyo”。一共有600个时区。
2、常用方法:
static Set<String> getAvailableZoneIds() | 获取Java中支持的所有时区 |
static ZoneId systemDefault() | 获取系统默认时区 |
static ZoneId of(String zoneId) | 获取一个指定的时区 |
// 获取Java中支持的所有时区
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
System.out.println(zoneIds);// 获取系统默认时区
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId);// 获取一个指定的时区
ZoneId zoneId1 = ZoneId.of("Asia/Pontianak");
System.out.println(zoneId1);
(二)、Instant:时间戳
1、概述
Instant是Java 8中新添加的类,用于表示时间戳。它是一个包含秒数和纳秒数的不可变对象,可以精确到纳秒级别。
2、常用方法:
static Instant now() | 获取当前时间的Instant对象(标准时间) |
static Instant ofXXX(long epochMilli) | 根据(秒/毫秒/纳秒)获取Instant对象 |
ZoneDateTime atZone(ZoneId zone) | 指定时区 |
boolean isXXX(Instant otherInstant) | 判断系列的方法 |
Instant minusXXX(long millisToSubtract) | 减少时间系列的方法 |
Instant plusXXX(long millisToSubtract) | 增加时间系列的方法 |
// 获取当前时间的Instant对象(标准时间)
Instant now = Instant.now();
System.out.println(now);// 根据(秒/毫秒/纳秒)获取Instant对象
Instant instant = Instant.ofEpochMilli(0L);
System.out.println(instant);Instant instant1 = Instant.ofEpochSecond(1L);
System.out.println(instant1);Instant instant2 = Instant.ofEpochSecond(1L, 1000000000L);
System.out.println(instant2);// 指定时区
ZonedDateTime zonedDateTime = now.atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(zonedDateTime);// 判断系列的方法
Instant instant3 = Instant.ofEpochMilli(0L);
Instant instant4 = Instant.ofEpochMilli(1000L);System.out.println(instant3.isBefore(instant4));
System.out.println(instant3.isAfter(instant4));// 减少时间系列的方法
Instant instant5 = Instant.ofEpochMilli(3000L);
System.out.println(instant5);Instant instant6 = instant5.minusSeconds(1);
System.out.println(instant6);// 增加时间系列的方法
Instant instant7 = Instant.ofEpochMilli(0L);
System.out.println(instant7);Instant instant8 = instant7.plusSeconds(10);
System.out.println(instant8);
(三)、ZoneDateTime:带时区的时间
1、概述
ZoneDateTime是Java 8中的日期时间类,表示带有时区偏移量的日期时间信息。它是LocalDateTime类和ZoneId类的结合,同时包含了时区信息和本地日期时间。它可以用来表示任意时区中的日期时间信息,并且可以方便地进行时区之间的转换。
2、常用方法:
now():返回当前时区的当前时间。
of():根据指定的年、月、日、小时、分钟、秒和时区创建一个 ZonedDateTime 对象。
toInstant():将 ZonedDateTime 对象转换为 Instant 对象,即从时区时间转为标准时间。
withZoneSameInstant():根据指定时区,将 ZonedDateTime 对象转换为同一时刻的另一个时区时间。
withZoneSameLocal():根据指定时区,将 ZonedDateTime 对象转换为同一本地时间的另一个时区时间。
toLocalDateTime():将 ZonedDateTime 对象转换为 LocalDateTime 对象,即去掉时区信息。
format():格式化 ZonedDateTime 对象为指定格式的时间字符串。
getYear():获取年份。
getMonth():获取月份。
getDayOfMonth():获取日期。
getDayOfWeek():获取星期几。
getHour():获取小时。
getMinute():获取分钟。
getSecond():获取秒数。
getNano():获取纳秒数。
二、日期格式化类
(一)、DateTimeFormatter:用于时间的格式化和解析
1、概述
DateTimeFormatter是Java 8中的一个类,用于格式化日期和时间。它可以将日期和时间对象转换为指定格式的字符串,也可以将字符串转换为日期和时间对象。
2、常用方法:
static DateTimeFormatter ofPattern(格式) | 获取格式对象 |
String format(时间对象) | 按照指定方式格式化 |
// 获取格式对象
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));// 解析/格式化器
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");// 格式化
System.out.println(dateTimeFormatter.format(zonedDateTime));
三、日历类
(一)、LocalDate:年、月、日
LocalTime:时、分、秒
LocalDateTime:年、月、日、时、分、秒
1、概述
Java中的LocalDate是一个不可变的日期对象,代表了一个年月日的日期,不包含时间和时区信息。它是Java 8 API中的一部分,位于java.time包中。
LocalDate类提供了许多方便的方法来处理日期、时间和时间间隔,例如加减天数、月份、年份、与其他日期比较等。它支持ISO日历系统(也就是公历)。
LocalTime是Java 8中的时间API中的一种类型。它代表的是一个不带时区的时间,即仅表示时间部分,如小时、分钟、秒和毫秒。
Java中的LocalDateTime是一个表示日期和时间,但没有时区偏移的类。它可以用于存储日期和时间的信息,例如:2021年8月15日下午3点30分。它不包含时区信息,所以它无法表示特定时区的时间。
2、常用方法:
static XXX now() | 获取当前时间的对象 |
static XXX of(...) | 获取指定时间的对象 |
get开头的方法 | 获取日历中的年,月,日,时,分,秒等信息 |
isBefore,isAfter | 比较两个LocalDate |
with开头 | 修改时间 |
minus开头 | 减少时间 |
plus开头 | 增加时间 |
public LocalDate toLocalDate() | LocalDateTiem转换成一个LocaDate对象 |
public LocalTime toLocalTime() | LocalDateTiem转换成一个LocaTime对象 |
// 只演示LocalDate
// 获取当前时间的对象
LocalDate date = LocalDate.now();
System.out.println(date); // 2023-12-12// 获取指定时间的对象
LocalDate localDate = LocalDate.of(2023, 1, 1);
System.out.println(localDate); // 2023-01-01// 获取日历中的年,月,日,时,分,秒等信息
int year = localDate.getYear();
System.out.println(year);// 2023// 获取月
Month m = localDate.getMonth();
System.out.println(m); // JANUARY
System.out.println(m.getValue()); // 1int value = localDate.getMonthValue();
System.out.println(value);// 1// 比较两个LocalDate
System.out.println(localDate.isBefore(localDate));
System.out.println(localDate.isAfter(localDate));// 修改时间
LocalDate withYear = localDate.withYear(2000);
System.out.println(withYear); // 2000-01-01// 减少时间
LocalDate minusYears = localDate.minusYears(1);
System.out.println(minusYears); // 2022-01-01// 增加时间
LocalDate plusYears = localDate.plusYears(1);
System.out.println(plusYears); // 2024-01-01
四、工具类
(一)、Duration:时间间隔(秒,纳秒)
1、概述
Java中的Duration是一个类,用于表示时间段的长度,以时间的标准单位表示,如小时、分钟、秒、毫秒等。它可以用于计算时间间隔,比较时间间隔的大小,以及在时间上进行加减运算等。
2、常用方法:
- ofXXX()方法:根据不同的单位创建Duration对象。
- plusXXX()方法和minusXXX()方法:用于添加和减去时间间隔。
- toXXX()方法:将Duration对象转换为指定单位的时间间隔。
- compareTo()方法:比较两个Duration对象的大小。
- getXXX()方法:获取Duration对象的属性值,例如hours、minutes、seconds等
Duration duration1 = Duration.ofSeconds(60); // 创建一个持续时间为60秒的Duration对象
Duration duration2 = Duration.ofMinutes(5); // 创建一个持续时间为5分钟的Duration对象Duration duration3 = Duration.ofSeconds(30);
Duration duration4 = duration3.plusSeconds(10); // 将持续时间增加10秒
Duration duration5 = duration3.minusSeconds(10); // 将持续时间减少10秒Duration duration6 = Duration.ofMinutes(5);
long seconds = duration6.toSeconds(); // 将持续时间转换为秒数Duration duration7 = Duration.ofSeconds(60);
Duration duration8 = Duration.ofMinutes(1);
int result = duration7.compareTo(duration8); // 比较持续时间是否相等Duration duration9 = Duration.ofHours(2);
long hours = duration9.toHours(); // 获取持续时间的小时数
(二)、Period:时间间隔(年,月,日)
1、概述
Java中的Period是表示两个日期之间的一段时间的类。它包含年、月、日等字段,可以用于计算两个日期之间的差值,也可以用于将一段时间加到日期上。Period类主要用于处理调整日期的情况,例如加上一个月、减去一年等。
2、常用方法:
- ofYears(int years): 创建一个表示指定年数的Period对象。
- ofMonths(int months): 创建一个表示指定月数的Period对象。
- ofDays(int days): 创建一个表示指定天数的Period对象。
- between(LocalDate startDateInclusive, LocalDate endDateExclusive): 创建一个表示两个日期之间的Period对象。
- getYears(), getMonths(), getDays(): 获取Period对象中的年、月、日等字段的值。
- plusYears(long yearsToAdd), plusMonths(long monthsToAdd), plusDays(long daysToAdd): 将指定的年、月、日数加到Period对象上。
- minusYears(long yearsToSubtract), minusMonths(long monthsToSubtract), minusDays(long daysToSubtract): 将指定的年、月、日数从Period对象上减去。
// 创建Period对象
Period period = Period.between(LocalDate.of(2019, 1, 1), LocalDate.now());
System.out.println(period.getYears() + " years " + period.getMonths() + " months " + period.getDays() + " days");// 在日期上加上一段时间
LocalDate date = LocalDate.of(2022, 1, 1);
Period nextYear = Period.ofYears(1);
LocalDate nextDate = date.plus(nextYear);
System.out.println("Next year is " + nextDate);
(三)、ChronoUnit:时间间隔(所有单位)
1、概述
ChronoUnit是Java 8中java.time包中的一个枚举类,表示一种时间单位。它提供了一组时间单位常量,用于在LocalDate、LocalTime、LocalDateTime和ZonedDateTime中执行日期或时间计算。
ChronoUnit中的常量包括:
- NANOS:纳秒
- MICROS:微秒
- MILLIS:毫秒
- SECONDS:秒
- MINUTES:分钟
- HOURS:小时
- HALF_DAYS:半天
- DAYS:天
- WEEKS:周
- MONTHS:月
- YEARS:年
- DECADES:十年
- CENTURIES:世纪
- MILLENNIA:千年
- ERAS:时代
2、常用方法:
between
方法:计算两个日期或时间之间的差距,返回值为long类型。addTo
方法:将指定的时间段添加到日期或时间中。isSupportedBy
方法:判断指定的日期或时间是否支持指定的时间单位。getDuration
方法:获取指定时间单位的持续时间。valueOf
方法:根据字符串返回对应的ChronoUnit枚举常量。
LocalDate d1 = LocalDate.of(2022, 1, 1);
LocalDate d2 = LocalDate.of(2022, 1, 10);
long daysBetween = ChronoUnit.DAYS.between(d1, d2);
System.out.println("daysBetween: " + daysBetween); // 输出:9LocalDate date = LocalDate.of(2022, 1, 1);
LocalDate newDate = date.plus(1, ChronoUnit.WEEKS);
System.out.println("newDate: " + newDate); // 输出:2022-01-08LocalDate date = LocalDate.of(2022, 1, 1);
boolean isSupported = ChronoUnit.HOURS.isSupportedBy(date);
System.out.println("isSupported: " + isSupported); // 输出:falseDuration dayDuration = ChronoUnit.DAYS.getDuration();
System.out.println("dayDuration: " + dayDuration); // 输出:PT24HChronoUnit unit = ChronoUnit.valueOf("MONTHS");
System.out.println("unit: " + unit); // 输出:MONTHS
相关文章:
Java之时间类2(JDK8新增)
一、Date类 (一)、ZoneId:时区 1、概述 ZoneId是Java 8中处理时区的类。它用于表示时区标识符,例如“America/New_York”或“Asia/Tokyo”。一共有600个时区。 2、常用方法: static Set<String> getAvailableZoneIds()获…...

MySQL InnoDB Replication部署方案与实践
1. 概述 MySQL Innodb ReplicaSet 是 MySQL 团队在 2020 年推出的一款产品,用来帮助用户快速部署和管理主从复制,在数据库层仍然使用的是主从复制技术。 ReplicaSet 主要包含三个组件:MySQL Router、MySQL Server 以及 MySQL Shell 高级客户…...

进程的同步和异步、进程互斥
一、进程同步和异步 同步(Synchronous): 同步指的是程序按照顺序执行,一个操作完成后才能进行下一个操作。在多进程或多线程的环境中,同步意味着一个进程(或线程)在执行某个任务时,…...

搞定课件录制,新手必备指南!
“有人知道课件怎么录制吗?学校要求我们师范专业的学生出去实习,现在需要录制一个课件视频,以便在课堂上播放,可是我不会录制教学视频,真的很头疼,有人能帮帮我吗。” 随着在线教育的崛起,课件…...

DevOps搭建(九)-Jenkins实现基础CI、CD详细操作
1、创建可运行SpringBoot项目 1.1、创建一个新工程 在idea里创建一个项目,这里叫devops-test,如下图: String Boot版本要选择2.x的,依赖直选中Spring Web选项即可: 修改pom.xml文件,在build标签中增加如下内容,目的是简化jar包名称。 <finalName>devops-test&l…...

十指波课堂:让学习编程不再是难事
十指波课堂是一家致力于发展线上私教平台的教育机构,主要的科目是计算机编程相关语言。由于学习编程的过程较为困难,学习者没有具体的学习方向,将要达到的就业水平不明,总会因为一些小问题困扰几个小时,这样会严重的影…...

IDEA卡顿,进行性能优化设置(亲测有效)——情况二
问题背景与现象 IDEA今天突然显示到期,于是从同事那边搞到一个很好用的破解方式,说实话,非常方便(后续在安前码后中分享) 破解之后呢,香了一阵子,但是突然显示开始卡顿,界面几乎是…...

利用Python和OpenCV实现将图像识别为Excel表格的便捷方法
当今社会,图像识别技术的发展为我们提供了许多便利,比如将图像中的文本信息转化为可编辑的电子表格。在本文中,我们将介绍如何利用Python结合OpenCV和pytesseract库,来实现将图像识别为Excel表格的过程。 首先,我们需…...

mysql:查看一个表的索引信息
可以使用命令SHOW INDEX FROM table_name;查看一个表的索引信息,例如:...

12月11日作业
完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配…...

HTTP协议在Linux上进行数据库访问代码示例
在Linux上使用HTTP协议进行数据库访问通常涉及到使用库如requests来进行HTTP请求,以及使用json或类似的库来处理返回的数据。下面是一个使用Python的简单示例,展示如何通过HTTP协议在Linux上访问数据库。 首先,你需要确保你的Linux系统上已经…...

CS.DEEP | 基于 openGauss 实现的计算机论坛项目
前言 本项目是一个基于前后端分离(后端:SpringBoot openGauss,前端:Vue3 Element Plus)实现的开源计算机博客论坛项目,旨在为用户提供一个方便、高效的博客发布和交流平台。 本平台支持 Markdown 编辑&…...

【ArcGIS Pro微课1000例】0053:基于SQL Server创建与启用地理数据库
之前的文章有讲述基于SQL Server创建企业级地理数据库,本文讲述在SQL Server中创建常规的关心数据库,然后在ArcGIS Pro中将其启用,转换为企业级地理数据库。 1. 在SQL Server中创建数据库** 打开SQL Server 2019,连接到数据库服务器。 展开数据库连接,在数据库上右键→新…...

快速排序(2)
一、快速排序有三种方法:hoare版本、挖坑法、前后指针版本 但是三种方法的核心思想都是一样的,都是将该数组分为左右两半递归式的排序。 1.hoare版本 该方法是先保存a[keyi]位置的值,然后右边先开动找小,找到小后,左…...

持续集成和持续交付
引言 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一种面向开发和运维团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”&#…...

C#、JavaScript、VBScript解析JSON数据源码
本示例使用设备:WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) C#解析JSON数据 string dispstr "{" getChinesecode("扫码") ":}" data; //显示信息,注意中文汉字一定要转换为设备能显…...

JVM面试连环炮:你准备好迎接挑战了吗?
在Java开发领域,JVM面试一直是一个热门话题。作为一名优秀的开发者,你是否已经准备好迎接这场挑战了呢?今天,我们就来深度解析一下JVM面试的热点问题,帮助你更好地应对面试,一举拿下offer! 1、…...
Ansible通过kubernetes.core.k8s_info和kubernetes.core.k8s访问OCP
文章目录 环境OCPClient(Ansible控制节点) 步骤准备工作在client端配置ssh免密登录OCP端在client端安装Ansible kubernetes.core.k8s_info第1次尝试在OCP端安装python和pip3在OCP端安装kubernetes在OCP端安装PyYAML第2次尝试在OCP端配置config文件第3次尝…...

vscode汉化
安装插件 Chinese (Simplified) (简体中文) Language Pack for 重新打开,若还是没有汉化: 【CtrlShiftp】 输入“configure display language”,回车键 选择刚刚安装的 中文(简体)...
美易投资:美国圣诞树价格飙升,涨价的问题所在?
美国圣诞树价格飙升,商家称“拜登经济学”是导致涨价的罪魁祸首 随着圣诞节的临近,美国各地的家庭开始准备庆祝这一传统佳节。然而,今年美国的圣诞树价格却呈现出了明显的上涨趋势。据一些商家反映,这主要是由于“拜登经济学”所致…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...