当前位置: 首页 > 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是一种编…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...