Java8 - LocalDateTime时间日期类使用详解

news2024/9/22 9:54:42

🏷️个人主页:牵着猫散步的鼠鼠 

🏷️系列专栏:Java全栈-专栏

🏷️个人学习笔记,若有缺误,欢迎评论区指正 

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站AI学习网站。    

目录

前言

一、LocalDateTime 的创建

1. of() 方法

2. now() 方法

3. parse() 方法

4. from() 方法

二、LocalDateTime 的转换

1. toLocalDate() 方法

2. toLocalTime() 方法

3. atOffset() 方法

4. toEpochSecond() 方法

5. from() 方法

三、LocalDateTime 的格式化与解析

1. format() 方法

2. parse() 方法

3. DateTimeFormatter 类

四、LocalDateTime 的计算与比较

1. plusXxx() 和 minusXxx() 方法

2. withXxx() 方法

3. isBefore() 和 isAfter() 方法

五、LocalDateTime 的其他操作

1. with() 方法

2. getXXX() 方法

3. getDayOfWeek() 和 getDayOfMonth() 方法

4. toInstant() 方法

5. compareTo() 方法

总结


前言

LocalDateTime 是 Java 8 中日期时间 API 提供的一个类,在日期和时间的表示上提供了更加丰富和灵活的支持。

LocalDateTime 类相比于早期的 Date 和 Calendar 类来说有以下几个优势:

  1. 更加丰富的日期时间类型支持: LocalDateTime 类封装了 LocalDate 和 LocalTime 两个类,支持更加细化的日期时间操作,例如获取某一天的开始和结束时间、获取某个时间段内的所有日期等。

  2. 线程安全性: LocalDateTime 类是不可变对象,线程安全性较高,可以在多线程环境下安全使用。

  3. 时区支持: LocalDateTime 类在处理时区相关的操作时有着很好的支持,例如可以将一个 LocalDateTime 对象转换成 ZonedDateTime 对象,以支持更加复杂的时区计算。

LocalDateTime 类的实现原理是基于 Java 的时间 API,其内部实现主要依赖于 Java 中的 long 类型和标准 Unix 时间戳来表示日期时间。具体来说,LocalDateTime 内部包含了一个 long 类型的字段,用于表示自 UTC(协调世界时)1970 年 1 月 1 日 00:00:00 开始经过的毫秒数(即 Unix 时间戳),通过对这个时间戳的操作来实现 LocalDateTime 类的各种功能。

同时,在实现时区相关的操作时,LocalDateTime 类还依赖于 Java 中的时区类(例如 ZoneId 和 ZoneOffset),通过将 LocalDateTime 转换为 ZonedDateTime 或 OffsetDateTime 对象来实现时区相关的计算。

一、LocalDateTime 的创建

LocalDateTime 类通过提供许多静态方法来创建对象,这些方法包括:

1. of() 方法

of() 方法用于根据指定的年、月、日、时、分、秒和纳秒值创建一个 LocalDateTime 对象,其语法如下:

public static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)

其中,year、month、dayOfMonth、hour、minute、second 和 nanoOfSecond 分别表示年、月、日、时、分、秒和纳秒值。

例如,以下代码创建了一个 LocalDateTime 对象,表示 2019 年 10 月 30 日 14 点 30 分 0 秒:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
2. now() 方法

now() 方法用于获取当前系统时间的 LocalDateTime 对象,其语法如下:

public static LocalDateTime now()

例如,以下代码创建了一个 LocalDateTime 对象,表示当前系统时间:

LocalDateTime dateTime = LocalDateTime.now();
3. parse() 方法

parse() 方法用于将一个字符串解析成 LocalDateTime 对象,其语法如下:

public static LocalDateTime parse(CharSequence text)
public static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)

其中,text 表示要解析的字符串,formatter 表示日期时间格式化对象。如果不指定 formatter,则默认使用 ISO_LOCAL_DATE_TIME 格式。

例如,以下代码创建了一个 LocalDateTime 对象,表示 2019 年 10 月 30 日 14 点 30 分 0 秒:

LocalDateTime dateTime = LocalDateTime.parse("2019-10-30T14:30:00");
4. from() 方法

from()方法用于将一个 TemporalAccessor 对象转换成 LocalDateTime 对象,其语法如下:

public static LocalDateTime from(TemporalAccessor temporal)

例如,以下代码将一个 ZonedDateTime 对象转换成 LocalDateTime 对象:

ZonedDateTime zonedDate = ZonedDateTime.of(2019, 10, 30, 14, 30, 0, 0, ZoneId.systemDefault());
LocalDateTime localDateTime = LocalDateTime.from(zonedDate);

二、LocalDateTime 的转换

LocalDateTime 类提供了许多方便的转换方法,我们可以把 LocalDateTime 转换成其他类型,或者把其他类型转换成 LocalDateTime。这些方法包括:

1. toLocalDate() 方法

toLocalDate()方法用于把 LocalDateTime 对象转换成 LocalDate 对象,其语法如下:

public LocalDate toLocalDate()

例如,以下代码将一个 LocalDateTime 对象转换成 LocalDate 对象:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
LocalDate date = dateTime.toLocalDate();
2. toLocalTime() 方法

toLocalTime()方法用于把 LocalDateTime 对象转换成 LocalTime 对象,其语法如下:

public LocalTime toLocalTime()

例如,以下代码将一个 LocalDateTime 对象转换成 LocalTime 对象:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
LocalTime time = dateTime.toLocalTime();
3. atOffset() 方法

atOffset() 方法用于把 LocalDateTime 对象转换成带偏移量的 OffsetDateTime 对象,其语法如下:

public OffsetDateTime atOffset(ZoneOffset offset)

其中,offset 表示要添加的时区偏移量。

例如,以下代码将一个 LocalDateTime 对象转换成带偏移量的 OffsetDateTime 对象:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
ZoneOffset offset = ZoneOffset.of("+08:00");
OffsetDateTime offsetDateTime = dateTime.atOffset(offset);
4. toEpochSecond() 方法

toEpochSecond() 方法用于把 LocalDateTime 对象转换成 Unix 时间戳,其语法如下:

public long toEpochSecond(ZoneOffset offset)

其中,offset 表示要添加的时区偏移量。

例如,以下代码把一个 LocalDateTime 对象转换成 Unix 时间戳:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
ZoneOffset offset = ZoneOffset.of("+08:00");
long epochSecond = dateTime.toEpochSecond(offset);
5. from() 方法

from() 方法用于将一个 TemporalAccessor 对象转换成 LocalDateTime 对象,其语法与前面讲解的相同,这里不再赘述。

三、LocalDateTime 的格式化与解析

日期时间的格式化与解析是 Java 8 中日期时间 API 中的重要功能。LocalDateTime 类通过内置的 DateTimeFormatter 类以及一些方法来实现格式化和解析。下面我们将详细介绍 LocalDateTime 类的格式化和解析方法。

1. format() 方法

format() 方法用于将 LocalDateTime 对象格式化成字符串,其语法如下:

public String format(DateTimeFormatter formatter)

其中,formatter 表示日期时间格式化对象。

例如,以下代码将一个 LocalDateTime 对象格式化成 " yyyy-MM-dd HH:mm:ss " 格式的字符串:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String strDate = dateTime.format(formatter);
2. parse() 方法

parse() 方法用于将一个字符串解析成 LocalDateTime 对象,其语法在前面已经介绍过,这里不再赘述。

例如,以下代码将一个字符串解析成 LocalDateTime 对象:

LocalDateTime dateTime = LocalDateTime.parse("2019-10-30T14:30:00");
3. DateTimeFormatter 类

DateTimeFormatter 类是 Java 8 中提供的日期时间格式化类,它提供了多种内置的格式化方式,同时也可以自定义日期时间格式。常用的几种内置格式化方式包括:

ofPattern() 方法 :使用指定的模式字符串创建一个 DateTimeFormatter 对象。

public static DateTimeFormatter ofPattern(String pattern)

例如,以下代码创建了一个 " yyyy-MM-dd HH:mm:ss " 格式的 DateTimeFormatter 对象:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

ISO_LOCAL_DATE_TIME :表示格式为 "yyyy-MM-ddTHH:mm:ss" 的日期时间。 

public static final DateTimeFormatter ISO_LOCAL_DATE_TIME

例如,以下代码创建了一个 " yyyy-MM-ddTHH:mm:ss " 格式的 DateTimeFormatter 对象:

DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;

ISO_LOCAL_DATE :表示格式为 "yyyy-MM-dd" 的日期。 

public static final DateTimeFormatter ISO_LOCAL_DATE

例如,以下代码创建了一个 " yyyy-MM-dd " 格式的 DateTimeFormatter 对象:

DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;

四、LocalDateTime 的计算与比较

LocalDateTime 类还提供了一些方法来进行日期时间的计算和比较。这些方法包括:

1. plusXxx() 和 minusXxx() 方法

plusXxx() 和 minusXxx() 方法分别用于在当前 LocalDateTime 对象上加上或减去指定的日期时间量,其中 Xxx 表示日期时间单位,如:Years、Months、Days、Hours、Minutes、Seconds 和 Nanos。

例如,以下代码将一个 LocalDateTime 对象加上 1 年并减去 1 月:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
dateTime = dateTime.plusYears(1).minusMonths(1);
2. withXxx() 方法

withXxx() 方法用于以指定的日期时间量来修改 LocalDateTime 对象的对应字段,其他字段不变,其中 Xxx 表示日期时间单位,如:Year、Month、DayOfMonth、Hour、Minute、Second 和 Nano。

例如,以下代码将 LocalDateTime 对象的年份修改为 2020 年:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
dateTime = dateTime.withYear(2020);
3. isBefore() 和 isAfter() 方法

isBefore() 和 isAfter() 方法分别用于判断两个 LocalDateTime 对象的先后顺序。其中, isBefore() 方法用于判断当前 LocalDateTime 对象是否在参数对象之前, isAfter() 方法用于判断当前 LocalDateTime 对象是否在参数对象之后。

例如,以下代码判断两个 LocalDateTime 对象的先后顺序:

LocalDateTime dateTime1 = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2020, 10, 30, 14, 30, 0, 0);
boolean before = dateTime1.isBefore(dateTime2); // true
boolean after = dateTime1.isAfter(dateTime2);   // false

五、LocalDateTime 的其他操作

LocalDateTime 类还提供了一些其他操作,这些操作包括:

1. with() 方法

with() 方法用于以指定的 TemporalAdjuster 对象或者方法来修改 LocalDateTime 对象,例如,以下代码将 LocalDateTime 对象的日期调整为当前月份的第一天:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
dateTime = dateTime.with(TemporalAdjusters.firstDayOfMonth());

其中,TemporalAdjusters 是 Java 8 中提供的一个类,它提供了许多方便的日期时间调整器,如: firstDayOfMonth() 、 lastDayOfMonth() 、 next() 、 previous() 等。通过调用这些方法可以生成对应的 TemporalAdjuster 对象。

2. getXXX() 方法

getXXX() 方法用于获取 LocalDateTime 对象的指定字段值,其中 Xxx 表示日期时间单位,如:Year、Month、DayOfMonth、Hour、Minute、Second 和 Nano。

例如,以下代码获取 LocalDateTime 对象的月份和分钟数:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
int month = dateTime.getMonthValue();  // 10
int minute = dateTime.getMinute();     // 30
3. getDayOfWeek() 和 getDayOfMonth() 方法

getDayOfWeek() 和 getDayOfMonth() 方法分别用于获取 LocalDateTime 对象所表示日期的星期几和哪一天。例如,以下代码获取 LocalDateTime 对象的星期几和哪一天:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
DayOfWeek dayOfWeek = dateTime.getDayOfWeek();   // WEDNESDAY
int dayOfMonth = dateTime.getDayOfMonth();       // 30
4. toInstant() 方法

toInstant() 方法用于获取 LocalDateTime 对象的 Instant 对象,其中 Instant 对象表示了从 1970 年 1 月 1 日 00:00:00 GMT 开始的毫秒数例如,以下代码获取 LocalDateTime 对象的 Instant 对象:

LocalDateTime dateTime = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
Instant instant = dateTime.toInstant();
5. compareTo() 方法

compareTo() 方法用于比较两个 LocalDateTime 对象的顺序大小,如果当前对象在参数对象之前,则返回负数,如果当前对象在参数对象之后,则返回正数,如果两个对象相等,则返回 0。

例如,以下代码比较两个 LocalDateTime 对象的顺序:

LocalDateTime dateTime1 = LocalDateTime.of(2019, 10, 30, 14, 30, 0, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2020, 10, 30, 14, 30, 0, 0);
int result = dateTime1.compareTo(dateTime2);  // -1

总结

本文从 LocalDateTime 类的创建、转换、格式化与解析、计算与比较以及其他操作几个方面详细介绍了 LocalDateTime 类在 Java 8 中的使用。

掌握 LocalDateTime 类的使用可以大大提高日期时间处理效率和质量,希望本文对读者有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1481072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

又挖到宝了!国人团队研发的AI视频工具PixVerse,这么好用居然还完全免费!(强烈推荐)

昨天发了一款国产免费的 AI 绘画工具 Dreamina 的介绍: 居然才发现!字节跳动旗下国产AI绘画工具Dreamina,这么好用居然还免费!(强烈推荐) 发现大家对国产 AI 工具还挺感兴趣的。今天继续帮大家挖国产的 A…

Python环境搭建:一站式指南

在当前AIGC技术蓬勃发展的背景下,Python作为人工智能领域最受青睐的编程语言之一,成为我们必须掌握的技能。因此,搭建一个适合自己的Python环境成为了每个Python开发者的首要任务。本文将为您提供一站式的Python环境搭建指南,帮助…

学习:Sora技术报告Video generation models as world simulators,2024.2

原文链接: Video generation models as world simulators (openai.com) 摘要: 我们探索了在视频数据上大规模训练生成模型。具体来说,我们在可变片长、分辨率和纵横比的视频和图像上联合训练文本条件扩散模型text-conditional diffusion mo…

腾讯云2024年优惠活动和云服务器优惠价格清单,3月最新整理

腾讯云优惠活动2024新春采购节活动上线,云服务器价格已经出来了,云服务器61元一年起,配置和价格基本上和上个月没什么变化,但是新增了8888元代金券和会员续费优惠,腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

上云还是下云,最大挑战是什么?| 对话章文嵩、毕玄、王小瑞

近半年来,公有云领域频频发生阿里云、滴滴等平台崩溃事件,与此同时,马斯克的“X 下云省钱”言论引起了广泛关注,一时间,“上云”和“下云”成为热议话题。在最近举办的 AutoMQ 云原生创新论坛上,AutoMQ 联合…

【计算机网络】五种IO模型与IO多路转接之select

文章目录 一、五种IO模型二、非阻塞IO1.fcntl2.实现函数SetNoBlock3.轮询方式读取标准输入 三、I/O多路转接之select1.初识select2.select函数原型3.socket就绪条件4.select的特点5.select缺点6.select使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.select…

力扣SQL50 使用唯一标识码替换员工ID 查询

Problem: 1378. 使用唯一标识码替换员工ID 思路 left join:左连接 Code select eu.unique_id,e.name from Employees e left join EmployeeUNI eu # left join 左连接 on e.id eu.id;

模型练习史

文章目录 肌肉光头vikingtorso死侍蓝毒液卡通girlwalletdog headman anatomy总结 肌肉光头 viking torso 死侍 蓝毒液 卡通girl wallet dog head man anatomy 总结 zbrush 与 blender 结合使用, 善 !

金融短信群发平台具有那些特点

金融短信群发平台的特点主要包括以下几个方面: 1.高效性:金融短信群发平台能够快速地发送大量的短信,使得金融信息能够迅速传达给目标客户,保证了信息的及时性和有效性。 2.安全性:金融短信群发平台对于信息的安全性非…

Java中使用poi+poi-tl实现根据模板导出word文档

场景 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出: 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出_若依导出前端获得到后端的execl流之后怎么操作-CSDN博客 上面讲的是Excel的导出,如果是需要根据w…

VBA技术资料MF124:移动单个文件及移动某类型文件

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

MacBook将iPad和iPhone备份到移动硬盘

#创作灵感# 一个是ICloud不够用,想备份到本地;然而本地存储不够用,增加容量巨贵,舍不得这个钱,所以就想着能不能备份到移动硬盘。刚好有个移动固态,所以就试了一下,还真可以。 #正文# 说一下逻…

VUE3:统计分析页面布局+自适应页面参考

一、布局 <template><div class"container1"><div class"form white"><el-form :inline"true" :rules"rules" :model"queryParams" label-width"80px" ref"querParmRef"><e…

基于NeRF/Gaussian的全新SLAM算法

什么是SLAM&#xff1f; SLAM&#xff0c;即同时定位与地图构建技术&#xff0c;SLAM可以让机器人、无人机和其他自动化系统能够在未知环境中同时进行自我定位和环境映射。 为什么是NeRF-Based SLAM&#xff1f; 传统CG将输入图像重新投影再融合到新的视图摄像机中&#xff0c…

useState多次渲染页面卡顿 useMemo

useState多次渲染页面卡顿 state变化了组件自然应该重新进行渲染&#xff0c;但有时我们并不需要。 React.memo()(useMemo)是一个高阶组件&#xff0c;它接收另一个组件作为参数&#xff0c;并且会返回一个包装过的新组件&#xff0c;包装过的新组件就会具有缓存作用&#xff…

Qt 中Qwidget相关属性

文章目录 1. QWidget 核心属性1.1 enabled1.2 geometry1.2.1 window frame 的影响 1.3 windowTitle1.4 windowIcon1.4.1 qrc的使用 1.5 windowOpacity1.6 cursor1.7 focusPolicy1.8 styleSheet 1. QWidget 核心属性 在 Qt 中, 使⽤ QWidget 类表⽰ “控件”. 像按钮, 视图, 输…

MES系统在离散制造企业中的功能解析

随着信息技术的快速发展和制造业的转型升级&#xff0c;MES在离散制造企业中的作用日益凸显。MES系统不仅提高了生产效率和产品质量&#xff0c;还优化了资源配置&#xff0c;增强了企业的市场竞争力。 一、生产管理功能 MES系统能够实时监控生产现场的各种数据&#xff0c;包…

数据库常见理论常见面试题(总结)

一、前言 这里呢&#xff0c;博主会介绍一些平时关于数据库的理论的问题&#xff0c;比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识&#xff0c;但是像索引、事务、锁等内容&#xff0c;之前的文章就讲解过了&#xff0c;这里就不作过多的介绍了&am…

基于Beego 1.12.3的简单website实现

参考 用Beego开发web应用 https://www.cnblogs.com/zhangweizhong/p/10919672.htmlBeego官网 Homepage - beego: simple & powerful Go app frameworkbuild-web-application-with-golang https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/pr…

猫头虎的技术林: 加速你的Python项目 - 如何配置国内pip下载源

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …