![]()
🏷?個人主頁:牽著貓散步的鼠鼠?
🏷?系列專欄: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 類來說有以下幾個優勢:
-
更加豐富的日期時間類型支持:?LocalDateTime 類封裝了 LocalDate 和 LocalTime 兩個類,支持更加細化的日期時間操作,例如獲取某一天的開始和結束時間、獲取某個時間段內的所有日期等。
-
線程安全性:?LocalDateTime 類是不可變對象,線程安全性較高,可以在多線程環境下安全使用。
-
時區支持:?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 類的使用可以大大提高日期時間處理效率和質量,希望本文對讀者有所幫助。