Table of Contents
ToggleJava DateTimeFormatter Class
提供了解析及格式化日期時間的 API ,用來顯示及解析日期時間的類別,支援了多種遵循 ISO 和 RFC 標準,預先定義的日期時間樣版及採用自定義樣版,介紹常見的 toFormat 、 get 等方法, DateTimeFormatter Class 本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- datetime
| +- datetimeformatter
| +- DateTimeFormatterClassTest.java
單元測試
DateTimeFormatter Class Java 提供預先定義、自定義的日期時間樣版,格式化等操作 DateTimeFormatter 。
toFormat
DateTimeFormatter Class Java 建立一個 DateTimeFormatter ,提供樣版,格式化日期時間。
@Test
public void toFormat() {
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2023-03-14T09:08:07.123456789+08:00[Asia/Singapore]");
DateTimeFormatter formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
Format format = formatter.toFormat();
String result = format.format(zonedDateTime);
System.out.println(result);
assertEquals("2023-03-14T09:08:07.123456789+08:00[Asia/Singapore]", result);
formatter = DateTimeFormatter.ISO_INSTANT;
format = formatter.toFormat();
result = format.format(zonedDateTime);
System.out.println(result);
assertEquals("2023-03-14T01:08:07.123456789Z", result);
formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
format = formatter.toFormat();
result = format.format(zonedDateTime);
System.out.println(result);
assertEquals("Tue, 14 Mar 2023 09:08:07 +0800", result);
}
2023-03-14T09:08:07.123456789+08:00[Asia/Singapore]
2023-03-14T01:08:07.123456789Z
Tue, 14 Mar 2023 09:08:07 +0800
get
DateTimeFormatter Class Java 建立一個 DateTimeFormatter ,取得物件資訊。
@Test
public void get() {
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
System.out.println(formatter.getChronology());
System.out.println(formatter.getDecimalStyle());
System.out.println(formatter.getLocale());
System.out.println(formatter.getResolverFields());
System.out.println(formatter.getResolverStyle());
System.out.println(formatter.getZone());
}
ISO
DecimalStyle[0+-.]
zh_TW
null
STRICT
null
with
DateTimeFormatter Class Java 建立一個 DateTimeFormatter ,調整物件資訊。
@Test
public void with() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
formatter.withChronology(JapaneseChronology.INSTANCE);
formatter.withDecimalStyle(DecimalStyle.STANDARD);
formatter.withLocale(Locale.TRADITIONAL_CHINESE);
formatter.withResolverStyle(ResolverStyle.LENIENT);
formatter.withZone(ZoneId.of("UTC+8"));
LocalDateTime localDateTime = LocalDateTime.now();
String result = formatter.format(localDateTime);
System.out.println(result);
}
2023-06-26T21:15:36
DateTimeFormatterClassTest.java
DateTimeFormatter Class in Java 新增單元測試,驗證 Java DateTimeFormatter Class Example 是否符合預期。
package org.ruoxue.java_147.datetime.datetimeformatter;
import static org.junit.Assert.*;
import java.text.Format;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.chrono.JapaneseChronology;
import java.time.format.DateTimeFormatter;
import java.time.format.DecimalStyle;
import java.time.format.ResolverStyle;
import java.util.Locale;
import org.junit.Test;
public class DateTimeFormatterClassTest {
@Test
public void toFormat() {
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2023-03-14T09:08:07.123456789+08:00[Asia/Singapore]");
DateTimeFormatter formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
Format format = formatter.toFormat();
String result = format.format(zonedDateTime);
System.out.println(result);
assertEquals("2023-03-14T09:08:07.123456789+08:00[Asia/Singapore]", result);
formatter = DateTimeFormatter.ISO_INSTANT;
format = formatter.toFormat();
result = format.format(zonedDateTime);
System.out.println(result);
assertEquals("2023-03-14T01:08:07.123456789Z", result);
formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
format = formatter.toFormat();
result = format.format(zonedDateTime);
System.out.println(result);
assertEquals("Tue, 14 Mar 2023 09:08:07 +0800", result);
}
@Test
public void get() {
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
System.out.println(formatter.getChronology());
System.out.println(formatter.getDecimalStyle());
System.out.println(formatter.getLocale());
System.out.println(formatter.getResolverFields());
System.out.println(formatter.getResolverStyle());
System.out.println(formatter.getZone());
}
@Test
public void with() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
formatter.withChronology(JapaneseChronology.INSTANCE);
formatter.withDecimalStyle(DecimalStyle.STANDARD);
formatter.withLocale(Locale.TRADITIONAL_CHINESE);
formatter.withResolverStyle(ResolverStyle.LENIENT);
formatter.withZone(ZoneId.of("UTC+8"));
LocalDateTime localDateTime = LocalDateTime.now();
String result = formatter.format(localDateTime);
System.out.println(result);
}
}
心得分享
Java DateTimeFormatter Class Example 是執行緒安全且不可變的,提供預先定義的樣版,遵循 ISO-8601 格式, DateTimeFormatter Class in Java 提供 toFormat 、 get 等操作範例。