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

2024-03-02 01:20

本文主要是介绍Java8 - LocalDateTime时间日期类使用详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

🏷️系列专栏: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 类的使用可以大大提高日期时间处理效率和质量,希望本文对读者有所帮助。

这篇关于Java8 - LocalDateTime时间日期类使用详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/764493

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.