当前位置: 首页 > news >正文

Java 8常用时间 API

Date: 你不爱我了吗? 🚡

    • 本地时间
    • 时区相关
    • 格式化

在Java 8中,Instant类用于表示时间戳,相当于旧的Date类;LocalDateTime类用于表示日期和时间,相当于旧的Calendar类;DateTimeFormatter类用于格式化日期和时间,相当于旧的SimpleDateFormat类

本地时间

  1. LocalDate:表示日期,如:2023-04-06。
LocalDate now = LocalDate.now(); // 获取当前日期
LocalDate date = LocalDate.of(2023, 4, 6); // 通过年、月、日创建LocalDate对象
LocalDate plusDate = date.plusDays(1); // 增加1天
LocalDate minusDate = date.minusDays(1); // 减少1天
int year = date.getYear(); // 获取年份
int month = date.getMonthValue(); // 获取月份
int day = date.getDayOfMonth(); // 获取日期
  1. LocalTime:表示时间,如:14:30:00。
LocalTime now = LocalTime.now(); // 获取当前时间
LocalTime time = LocalTime.of(14, 30); // 通过小时和分钟创建LocalTime对象
LocalTime plusTime = time.plusHours(1); // 增加1小时
LocalTime minusTime = time.minusMinutes(30); // 减少30分钟
int hour = time.getHour(); // 获取小时
int minute = time.getMinute(); // 获取分钟
  1. LocalDateTime:表示日期时间,如:2023-04-06T14:30:00。
LocalDateTime now = LocalDateTime.now(); // 获取当前日期时间
LocalDateTime dateTime = LocalDateTime.of(2023, 4, 6, 14, 30); // 通过年、月、日、小时和分钟创建LocalDateTime对象
LocalDateTime plusDateTime = dateTime.plusDays(1); // 增加1天
LocalDateTime minusDateTime = dateTime.minusHours(2); // 减少2小时
int year = dateTime.getYear(); // 获取年份
int month = dateTime.getMonthValue(); // 获取月份
int day = dateTime.getDayOfMonth(); // 获取日期
int hour = dateTime.getHour(); // 获取小时
int minute = dateTime.getMinute(); // 获取分钟
  1. Instant:表示时间戳,即从1970年1月1日00:00:00开始的毫秒数。
Instant now = Instant.now(); // 获取当前时间戳
Instant instant = Instant.ofEpochMilli(1000); // 通过时间戳创建Instant对象
Instant plusInstant = instant.plusSeconds(10); // 增加10秒
Instant minusInstant = instant.minusMillis(500); // 减少500毫秒
long epochMilli = instant.toEpochMilli(); // 获取从1970年1月1日00:00:00开始的毫秒数
  1. Duration:表示时间间隔,如:2小时30分钟。
LocalDateTime start = LocalDateTime.of(2023, 4, 6, 14, 30);
LocalDateTime end = LocalDateTime.of(2023, 4, 6, 16, 0);
Duration duration = Duration.between(start, end); // 计算两个时间点之间的时间间隔
Duration plusDuration = duration.plusHours(1); // 增加1小时
Duration minusDuration = duration.minusMinutes(30); // 减少30分钟
long hours = duration.toHours(); // 获取总小时数
long minutes = duration.toMinutes(); // 获取总分钟数
  1. Period:表示日期间隔,如:2天。
LocalDate start = LocalDate.of(2023, 4, 6);
LocalDate end = LocalDate.of(2023, 4, 8);
Period period = Period.between(start, end); // 计算两个日期之间的日期间隔
Period plusPeriod = period.plusDays(1); // 增加1天
Period minusPeriod = period.minusWeeks(1); // 减少1周
int days = period.getDays(); // 获取天数
int months = period.getMonths(); // 获取月数

这些类都是线程安全的,不可变的,因此适合在多线程环境下使用。

在Java中,这些时间类的作用非常广泛,它们可以帮助我们处理日期时间相关的逻辑,例如计算时间差、格式化日期时间、比较时间、转换时区等等。在实际开发中,我们常常需要进行时间计算,例如计算两个时间点之间的时间差、计算某个日期是周几等等。这些时间类可以大大简化这些操作,使得我们的代码更加简洁、清晰、易于维护。

时区相关

  1. ZoneId:时区标识符,表示不同的时区,例如“Asia/Shanghai”。
ZoneId systemZone = ZoneId.systemDefault(); // 获取系统默认时区
ZoneId beijingZone = ZoneId.of("Asia/Shanghai"); // 根据时区ID创建ZoneId对象
  1. ZonedDateTime:带时区的日期时间,可以表示不同时区下的日期时间,例如“2023-04-06T14:30:00+08:00[Asia/Shanghai]”。
ZonedDateTime now = ZonedDateTime.now(); // 获取当前日期时间和时区信息的ZonedDateTime对象
ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDateTime.of(2023, 4, 6, 14, 30), ZoneId.of("Asia/Shanghai")); // 根据本地日期时间和时区创建ZonedDateTime对象
ZonedDateTime withZone = zonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York")); // 修改时区,并且保持日期时间不变
int year = zonedDateTime.getYear(); // 获取年份
int month = zonedDateTime.getMonthValue(); // 获取月份
int day = zonedDateTime.getDayOfMonth(); // 获取日期
int hour = zonedDateTime.getHour(); // 获取小时
int minute = zonedDateTime.getMinute(); // 获取分钟
ZoneId zone = zonedDateTime.getZone(); // 获取时区信息
  1. OffsetDateTime:带时区偏移量的日期时间,可以表示相对于UTC的偏移量,例如“2023-04-06T14:30:00+08:00”。
OffsetDateTime now = OffsetDateTime.now(); // 获取当前日期时间和时区偏移量信息的OffsetDateTime对象
OffsetDateTime offsetDateTime = OffsetDateTime.of(LocalDateTime.of(2023, 4, 6, 14, 30), ZoneOffset.of("+08:00")); // 根据本地日期时间和时区偏移量创建OffsetDateTime对象
OffsetDateTime plusOffsetDateTime = offsetDateTime.plusHours(1); // 增加1小时
OffsetDateTime minusOffsetDateTime = offsetDateTime.minusMinutes(30); // 减少30分钟
int year = offsetDateTime.getYear(); // 获取年份
int month = offsetDateTime.getMonthValue(); // 获取月份
int day = offsetDateTime.getDayOfMonth(); // 获取日期
int hour = offsetDateTime.getHour(); // 获取小时
int minute = offsetDateTime.getMinute(); // 获取分钟
ZoneOffset offset = offsetDateTime.getOffset(); // 获取时区偏移量信息
  1. ZoneOffset:时区偏移量,表示相对于UTC的偏移量,例如“+08:00”。
ZoneOffset offset1 = Zone

这些与时区相关的时间类可以帮助我们处理跨时区的时间计算和表示。在处理全球化应用时,时区相关的操作尤其重要,因为不同地区的时间可能有巨大的差异。这些时间类提供了强大的功能来处理跨时区的时间计算和表示,使得我们可以更好地应对全球化应用的时间需求。

格式化

在JDK8中,如果要对时间进行格式化,可以使用以下几个类:

  1. DateTimeFormatter:日期时间格式化类,它提供了很多方法来将日期时间格式化为字符串或解析字符串为日期时间。

  2. SimpleDateFormat:日期时间格式化类,它是JDK早期版本中的日期时间格式化类,在JDK8中仍然保留。它使用一些预定义的格式化字符串来格式化日期时间。

这两个类都提供了格式化日期时间的功能,但是使用方式略有不同。DateTimeFormatter提供了更加灵活的API来定制日期时间格式,它支持解析和格式化ISO 8601格式的日期时间字符串,并且可以支持多种语言环境。SimpleDateFormat则更适合于一些简单的日期时间格式化场景,它使用的是预定义的格式化字符串,虽然使用起来比较简单,但是可定制性较差。

下面是一个使用DateTimeFormatter对日期时间进行格式化的示例代码:

LocalDateTime dateTime = LocalDateTime.of(2023, 4, 6, 14, 30);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter); // 将日期时间格式化为指定格式的字符串
LocalDateTime parsedDateTime = LocalDateTime.parse("2023-04-06 14:30:00", formatter); // 将指定格式的字符串解析为日期时间

上面的代码使用DateTimeFormatter将当前时间格式化为“yyyy-MM-dd HH:mm:ss”的字符串格式。

相关文章:

Java 8常用时间 API

Date: 你不爱我了吗? 🚡本地时间时区相关格式化在Java 8中,Instant类用于表示时间戳,相当于旧的Date类;LocalDateTime类用于表示日期和时间,相当于旧的Calendar类;DateTimeFormatter类用于格式化日期和时间…...

C++运算符

C运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 1. 算术运算符 运算符描述实例把两个操作数相加A B 将得到 30-从第…...

低/无代码赋能企业,IT与业务的角色正在悄然改变

现在这个社会,年轻人的压力是真的大,需要会的技能多到数不清。想学习多点技能也不知道去哪学,主要是网络资源太丰富,很难找到一个适合自己的。那接下来推荐4个大神级别的资源网站你可一定得码住,都是年轻人特别 …...

SpringCloud学习2(Spring Cloud Netflix)负载均衡Ribbon、Feign负载均衡、Hystix服务熔断

文章目录负载均衡RibbonRibbon的作用代码实现生产者cloud1_provider实现配置文件在HiController中编写以下代码启动集群消费者cloud1_consumer实现引入依赖编写配置文件编写启动类,并给RestTemplate配置LoadBalanced注解编写RestController来测试Feign负载均衡简介F…...

Spring 源码解析 - @Async 注解下的循环依赖问题原理

一、Async 注解下的循环依赖问题 我们都知道 Spring IOC 单例模式下可以帮助我们解决循环依赖问题,比如下面自己依赖自己循环依赖的场景: Component public class TestAsync {ResourceTestAsync async;public void test() {System.out.println("t…...

8个全球性编程比赛,天才程序员的梦想舞台

很多编程爱好者在学习之初,都渴望与全球的程序员一较高下,以证明自己的实力。 一些全球性的编程竞赛为他们提供了这样的机会,不仅可以与全世界的顶尖程序员们交流,还有机会获得丰厚的奖金和进入顶级公司的机会,更重要…...

2023年中国海洋大学计算机及电子信息考研分析

考研时间跨度: 初试时间: 2022年8月23 海大推免及创新人才计划接收通知。 2022年9月13 海大专业目录及人数,包含推免。 2022年10月18 2022年硕士研究生计划 ,不含推免。 海大2022年硕士研究生计划 网上第一次时间为2022年9月24日…...

【C++笔试强训】第六天

选择题 1. 解析:十进制转换为八进制就是不断的除8,取余数。十进制转换成其他进制的数就是除以进制,取余。 解析:注意printf的转换,%%只会打印一个%,所以选A。 解析:由于()的原因p先和*结合&…...

Redission 中的 RedLock 原理实现, springboot 你造吗?

分布锁之RedLock 锁住你的心我的爱 🚂为什么需要使用 RedLock锁被误释放时钟不一致问题锁的“延迟释放”而不是死锁Redlock是啥redlock 存在什么问题惊群效应时钟漂移Redisson 实现 RedLock在 Redisson 中, RedLock的实现类是哪一个类?这一招叫抛砖引玉springboot …...

【沐风老师】3dMax一键房屋创建者插件使用方法详解

3dmax一键房屋创建者,一键生成墙体、窗洞和门洞的插件!这个脚本主要用于创建或捕获一些架构项目所代表的平面,这是通过导入它们并在每个所需的层添加值来实现的。传统方法,但是省事儿多了! 【版本要求】 3dMax 2015及…...

C/C++ 变量详解

文章目录前言一、静态变量与动态变量1. 概念2. 区别3. 使用方法和注意事项3.1 静态变量3.2 动态变量4. 结论二、全局变量与局部变量1. 区别2. 全局变量的使用方法和注意事项3. 局部变量的使用方法和注意事项4. 总结前言 对C学习感兴趣的可以看看这篇文章哦:C/C教程…...

新SSD盘安装操作系统启动不了

今天打算给电脑升级下装备,加装一块固态硬盘。 电脑原本自带两块硬盘(SSD128GSATA1T),SSD清理了许久还是没空间,于是就买了块1TSSD,打算扩容下。 打开电脑后盖傻眼了,没有备用插槽&#xff0c…...

基于Spring、SpringMVC、MyBatis的病历管理系统

文章目录 项目介绍主要功能截图:登录首页医院公告管理用户管理科室信息管理医生管理出诊信息管理预约时间段管理预约挂号管理门诊病历管理就诊评价管理轮播图管理功能架构图部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历…...

QT编程从入门到精通之三十四:“第五章:Qt GUI应用程序设计”之“5.5 Qt Creator使用技巧”

目录 第五章:Qt GUI应用程序设计 5.5 Qt Creator使用技巧 第五章:Qt GUI应用程序设计 在“Qt 程序创建基础”上,本章将继续深入地介绍Qt Creator设计GUI应用程序的方法,包括Qt创建的应用程序项目的基本组织结构,可视化设计的UI界面文件的原理和运行机制,信号与槽的使用…...

网络工程方向有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是网络工程领域的一些SCI期刊推荐: IEEE Transactions on Network and Service Management: 这是一个IEEE旗下的期刊,涵盖了网络与服务管理方面的研究。主要关注网络管理、服务管理和其它相关领域的创新和最新研究。 Computer Networks: 这是一本著…...

netty入门(二十六)任务加入异步线程池源码剖析

1.handler中加入线程池和Context添加线程池 1.1 源码剖析目的 (1)在 Netty 中做耗时的,不可预料的操作,比如:数据库、网络请求、会严重影响 Netty 对 Socket 的处理速度。 (2)而解决方法就是…...

神经网络算法入门和代码

文章内容 感知机(Perceptron)反向传播算法(Back Propagation algorithm)RBF(Radial Basis Function,径向基函数) 网络:单一层前馈网络,它使用径向基作为隐层神经元激活函数ART(Adaptive Resona…...

如何用一个端口同时暴露 HTTP1/2、gRPC、Dubbo 协议?

作者:华钟明 本文我们将介绍 Apache Dubbo 灵活的多协议设计原则,基于这一设计,在 Dubbo 框架底层可灵活的选用 HTTP/2、HTTP/REST、TCP、gRPC、JsonRPC、Hessian2 等任一 RPC 通信协议,同时享用统一的 API 与对等的服务治理能力。…...

ToBeWritten之杂项2

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…...

Linux三剑客之awk命令详解

1、概述 Linux三剑客:grep、sed、awk。grep主打查找功能,sed主要是编辑行,awk主要是分割列处理。本篇文章我们详细介绍awk命令。 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。awk是一种编…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...