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”,回车键 选择刚刚安装的 中文(简体)...
美易投资:美国圣诞树价格飙升,涨价的问题所在?
美国圣诞树价格飙升,商家称“拜登经济学”是导致涨价的罪魁祸首 随着圣诞节的临近,美国各地的家庭开始准备庆祝这一传统佳节。然而,今年美国的圣诞树价格却呈现出了明显的上涨趋势。据一些商家反映,这主要是由于“拜登经济学”所致…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...