Java DateTimeFormatter Class - Java 147

Java DateTimeFormatter Class – Java 147

Java 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 等操作範例。

發佈留言