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”,回车键 选择刚刚安装的 中文(简体)...
美易投资:美国圣诞树价格飙升,涨价的问题所在?
美国圣诞树价格飙升,商家称“拜登经济学”是导致涨价的罪魁祸首 随着圣诞节的临近,美国各地的家庭开始准备庆祝这一传统佳节。然而,今年美国的圣诞树价格却呈现出了明显的上涨趋势。据一些商家反映,这主要是由于“拜登经济学”所致…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
全面解析各类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…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
