1. DateTimeFormatter 類

特殊DateTimeFormatter類進入日期時間 API。它的目的是讓程序員盡可能容易地將日期和時間轉換成他們想要的準確格式。我們很高興地報告 Java 的創造者取得了成功。

使用起來非常簡單。首先,您需要創建一個DateTimeFormatter類並傳入指定日期和時間顯示方式的模式:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

哪裡dtfDateTimeFormatter變量。是類的靜態方法。pattern是一個字符串,指定將用於顯示日期和時間的模式DateTimeFormatter.ofPattern()DateTimeFormatter

例子

代碼 控制台輸出
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

在上面的例子中,我們使用ofPattern()方法創建了一個DateTimeFormatter基於模式的對象。在下一行中,我們使用該format()方法將對象轉換LocalDateTime為字符串。您會在屏幕上看到結果。

您幾乎可以將任何對像從 Date Time API 傳遞給該format()方法。

staticofPattern()也很簡單:它接受一個模式作為參數並返回一個DateTimeFormatter對象。最有趣的部分是在模式中。


2.格式化模式

作為模式傳入的字符串在顯示信息時用作模式。MM替換為月份數,dd替換為月份中的第幾天,yy替換為年份數。字母的大小寫很重要。

這些時間模式的完整表格是這樣的:

意義
d
H 小時
分鐘
小號 千分之一秒
n 納秒。

不是特別難記。

但是為什麼示例中的模式包含重複的字母 MM、dd 和 yy?好吧,這就是它變得更有趣的地方。

大概的概念

字母的數量會影響文本的長度。字母越多,文本就越長。

如果字母 H 指定一次,則 9 小時將顯示為 9,但如果字母 H 連續指定兩次,則 9 小時將顯示為 09。

如果字母 y 連續指定 2 次,則使用 2 位數字書寫年份。如果它連續出現 4 次,則使用 4 位數字。

如果字母 M 連續指定 2 次,則寫入月份數。如果連續 3 次,則使用月份名稱(前 3 個字母)。如果連續 4 次,則使用月份的全名。

例子:

代碼 控制台輸出
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3.完整的形態表

完整的表格非常大而且超級有趣:

圖案 圖案的變化 例子 描述
yy, yyyy 19; 2019
大號/大號 男,MM,MMM,MMMM,MMMMM 1; 01; 一月;一月; 傑
d d, dd 9; 09
H 哈,哈 2; 02 小時
米,毫米 3; 03 分鐘
小號,小號 5; 05
小號 S、SS、SSS、... 1; 12; 123 千分之一秒
n n 123456789 納秒級
G G、GGGG、GGGGG 廣告; 公元; A; 時代
q/q q, qq, qqq, qqqq 3; 03; Q3;第三季 四分之一
w w 13 一年中的一周
W W 3個 每月的第幾週
EEE, EEEE, EEEEE 星期一;週一; 米 一周中的天
電子郵件 e, ee, eee, eeee, eeeee 1; 01; 星期一;週一; 米 一周中的天
A A 下午 上午或下午
H H 12 12 小時制。
V 維維 歐洲/赫爾辛基 時區
z zzzzz 歐洲東部時間; 東歐標準時間 時區
啊啊啊 格林威治標準時間+2;格林威治標準時間+02:00 時區

順便說一下,這實際上不是一個完整的版本。您可以在此處找到最完整的版本。



4.解析時間

該類的DateTimeFormatter另一個有趣之處在於它不僅能夠根據給定模式將日期和時間轉換為字符串,而且還能執行反向操作!

解析字符串是將其拆分為有意義的標記的過程。

這是它的樣子:

代碼 控制台輸出
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

首先,我們創建一個DateTimeFormatter對象並設置用於解析的模式。

然後我們調用LocalDate.parse()orLocalTime.parse()LocalDateTime.parse()方法並將要解析的字符串與對像一起傳入DateTimeFormatter,該對象了解如何解析傳遞的文本以及應該使用什麼模式來解析。

另一個例子:這次我們將解析時間。

代碼 控制台輸出
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59