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 類的使用可以大大提高日期時間處理效率和質量,希望本文對讀者有所幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712322.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

redis+定時 模擬滑動窗口實現熔斷降級

業務背景 公司業務現用的通道為 A、B,為了降本,引入新的支付通道 Y,但 Y 通道的穩定性要低于 A、B,系統要能在 Y 通道故障時自動切回到 A、B,等 Y 恢復正常后,再切換到 Y。 乍一看很簡單,不就是…

使用鏈表和數組輸出A~Z的ASCII碼

輸出結果 26個字母以及其對應的ASCII碼 一、使用鏈表創建,注意: 節點需要有next指針初始化時head需要new一下 cur指針代表當前指針,每次不斷的New新的節點,pre指針代表當前指針的前一個指針,每次pre的next指針指向cur…

sql注入攻擊 - cookie注入

環境準備:構建完善的安全滲透測試環境:推薦工具、資源和下載鏈接_滲透測試靶機下載-CSDN博客 一、Cookie 知識介紹 Cookie(HTTP Cookie)是服務器發送到用戶瀏覽器并保存在本地的一小段數據,用于記錄用戶的相關信息和狀態。這些信息通常包括用戶的身份標識、網站偏好設置…

3.1日學習打卡----初學FastDFS(一)

3.1日學習打卡 目錄: 3.1日學習打卡一. 為什么要使用分布式文件系統二. FastDFS簡介核心概念上傳機制下載機制FastDFS環境搭建_LinuxFastDFS指令 一. 為什么要使用分布式文件系統 單機時代 初創時期由于時間緊迫,在各種資源有限的情況下,通常就直接在項…

二分+質因數分解,LightOJ 1138Trailing Zeroes (III)

一、題目 1、題目描述 You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! 1 * 2 * ... * N. For example, 5! 120, 120 contains one zero on the trail. 2、輸入輸出 2.1輸入 Input…

HTML---Ajax

文章目錄 目錄 文章目錄 前言 一.Ajax概述 二.原生創建Ajax 三,使用Jquery處理Ajax 總結 一.Ajax概述 AJAX(Asynchronous Javascript And XML)是一種創建交互式網頁應用的網頁開發技術。它使用Javascript語言與服務器進行異步交互,可以傳…

【計算機網絡】五種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…

DBGridEh 的排序

DBGridEh 可以點列抬頭使得記錄按該列排序 不需要寫代碼,只需要設置好,它就能排序。 網上的文章一般寫了如何設置。但一般都少說了一條。 先說如何設置: 1. OptionsEh.AutoSortMarking 設置為 True,如果是設計期屬性面板&…

Linux上搭建并使用ffmpeg(Java)

關于MacOs和Windows系統上使用ffmpeg就不多說了,有很多相關文章,今天給大家分享一個在Linux環境下使用Java語言來使用ffmpeg 一、首先去官網下載一個Linux對應的ffmpeg包 1、進入ffmpeg官網:官網 2、點擊左側導航欄Download 3、選擇Linux對…

如何利用graylog進行容器化日志管理?

Docker日志 當一個容器啟動的時候,它其實是docker deamon的一個子進程,docker daemon可以拿到容器里面進程的標準輸出,然后通過自身的LogDriver模塊來處理,LogDriver支持的方式很多,默認寫到本地文件,也可…

vue自定義實現icon選擇器

<template> <div> <span class"iconStyle" click"selectIcon"> <i :class"value" /> </span> <div class"iconTitle">選擇圖標</div> <el-dialog title"" :visible.sync"…

springboot + nacos + aws secretmanager 做賬號密碼隱私處理

方式一&#xff1a; #nacos配置文件data.yml: spring:cloud:nacos:discovery:ip: ****.comport: 80datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://*********/database?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&fail…

java 商機管理系統Myeclipse開發mysql數據庫web結構jsp編程計算機網頁項目

一、源碼特點 java 商機管理系統是一套完善的java web信息管理系統&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用B/S模式開發。開發環境為 TOMCAT7.0,Myeclipse8.5開發&#xff0c;數據庫為Mysql5.0&…

LeetCode142. 環形鏈表 II刷題詳解

今天力扣刷到了一個特別有意思的題目&#xff0c;于是就寫了下面的題解來加深以下理解。 142. 環形鏈表 II - 力扣&#xff08;LeetCode&#xff09; 這個可以分為兩大步去寫&#xff0c;首先要判斷鏈表是否有環&#xff0c;然后如果有環就去找到環的入口&#xff0c;沒有環返…

python3.x的在線與離線安裝純凈版

由于計劃搭建一套使用python自動分析日志的流程&#xff0c;發現我們的測試環境CentOS 7仍然沒有安裝python3&#xff0c;無法使用這些新的庫。Python 3在設計上著重提升了語言的一致性和易用性&#xff0c;它引入了許多關鍵改進&#xff0c;此外&#xff0c;Python 3環境擁有豐…

基于springboot+html實現的衣物捐贈平臺

一、系統架構 前端&#xff1a;html | layui | jquery | css 后端&#xff1a;springboot | thymeleaf | mybatis 環境&#xff1a;jdk1.8 | mysql | maven 二、代碼及數據庫 三、功能介紹 01. 登錄頁 02. 注冊 03. web頁-首頁 04. web頁-捐贈衣服 05. web頁-論壇交流…

C# 中的 IReadOnlyDictionary 和 IReadOnlyList

C# 中的 IReadOnlyDictionary 和 IReadOnlyList 是接口&#xff0c;用于表示只讀的字典和只讀的列表。這些接口提供了對集合的只讀訪問權限&#xff0c;即不允許對集合進行修改操作&#xff0c;例如添加、刪除或修改元素。這種只讀特性對于需要保護數據完整性或只需要進行讀取操…

MYSQL--鎖機制*

一.對鎖機制的大概介紹: 1.大概的來說,MYSQL當中的鎖實際上就是合理的管理多個服務器對于同一個共享資源的使用,是計算機協調多個進程或者是線程并發訪問某一資源的機制(避免爭搶資源的現象發生) 2.在數據庫當中,數據是一種可以供許多的用戶進行共享使用的資源,如何保證數據并發…

軟考筆記--軟件開發模型

軟件開發模型給出了軟件開發活動各個階段之間的關系&#xff0c;它是軟件開發過程的概括&#xff0c;是軟件工程的重要內容。軟件開發模型為軟件工程管理提供了里程碑和進度表&#xff0c;為軟件開發過程提供了原則和方法。 一.軟件開發模型概述 軟件開發模型可分為三種類型&…

第十一屆藍橋杯省賽第一場C++ A組 / B組《整數拼接》(c++)

1.題目說明 給定一個長度為 n 的數組 A1,A2,???,An。 你可以從中選出兩個數 Ai 和 Aj(i 不等于 j)&#xff0c;然后將 Ai 和 Aj 一前一后拼成一個新的整數。 例如 12 和 345 可以拼成 12345 或 34512。 注意交換 Ai 和 Aj 的順序總是被視為 2 種拼法&#xff0c;即便是 …