Java DateTimeFormatter Methods - Java 147

Java DateTimeFormatter Methods – Java 147

Java DateTimeFormatter Methods

屬於 java.time.format ,提供了格式化日期時間的 API ,用來顯示及解析日期時間物件,格式化 TemporalAccessor 類別,為日期、時間和偏移物件的基本接口,介紹常見的 ofPattern 、 format 等方法, DateTimeFormatter Java Methods 本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- datetime
       |                   +- datetimeformatter
       |                       +- DateTimeFormatterMethodsTest.java   

單元測試

DateTimeFormatter Methods Java 提供自定義的日期時間樣版,格式化等操作 DateTimeFormatter 。

Pattern symbols

自定義模式是使用在格式化或解析時,具有特殊意義的字母。

SymbolDescriptionExample
y年份2023
M月份1-12
MMM月份縮寫Jan
MMMM完整的月份名稱January
d一月中的某一天1-31
E星期幾縮寫Mon
EEEE完整的星期名稱Monday
h小時0-11
H小時0-23
m分鐘0-59
s0-59
S秒的小數部分0-9
a AM / PM,早上或下午AM
z時區縮寫PST
Z時區偏移+0800

ofPattern

DateTimeFormatter Methods Java 建立一個 DateTimeFormatter ,提供樣版,格式化日期時間。

	@Test
	public void ofPattern() {
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
		String result = formatter.format(LocalDateTime.now());
		System.out.println(result);

		formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		result = formatter.format(LocalDate.now());
		System.out.println(result);

		formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
		result = formatter.format(LocalTime.now());
		System.out.println(result);
	}
2023-06-25T21:40:32
2023-06-25
21:40:32

format

DateTimeFormatter Methods Java 建立一個 DateTimeFormatter ,提供樣版,格式化 LocalDateTime 日期時間。

	@Test
	public void format() {
		LocalDateTime localDateTime = LocalDateTime.parse("2023-03-14T09:08:07.123456789");
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
		String result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023-03-14T09:08:07", result);

		formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS");
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023-03-14T09:08:07.123456789", result);

		formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023-03-14T09:08:07.123", result);

		formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.TRADITIONAL_CHINESE);
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023-03-14T09:08:07.123", result);
	}
2023-03-14T09:08:07
2023-03-14T09:08:07.123456789
2023-03-14T09:08:07.123
2023-03-14T09:08:07.123

formatLocalDate

DateTimeFormatter Methods Java 建立一個 DateTimeFormatter ,提供樣版,格式化 LocalDate 日期,提供 DateTimeFormatter Functions in Java 範例。

	@Test
	public void formatLocalDate() {
		LocalDate localDate = LocalDate.parse("2023-03-14");
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		String result = formatter.format(localDate);
		System.out.println(result);
		assertEquals("2023-03-14", result);

		formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
		result = formatter.format(localDate);
		System.out.println(result);
		assertEquals("20230314", result);

		formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd", Locale.TRADITIONAL_CHINESE);
		result = formatter.format(localDate);
		System.out.println(result);
		assertEquals("2023/03/14", result);
	}
2023-03-14
20230314
2023/03/14

formatLocalTime

DateTimeFormatter Methods in Java 建立一個 DateTimeFormatter ,提供樣版,格式化 LocalTime 時間,提供 DateTimeFormatter Functions in Java 範例。

	@Test
	public void formatLocalTime() {
		LocalTime localTime = LocalTime.parse("09:08:07.123456789");
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
		String result = formatter.format(localTime);
		System.out.println(result);
		assertEquals("09:08:07", result);

		formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSSSSS");
		result = formatter.format(localTime);
		System.out.println(result);
		assertEquals("09:08:07.123456789", result);

		formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS");
		result = formatter.format(localTime);
		System.out.println(result);
		assertEquals("09:08:07.123", result);

		formatter = DateTimeFormatter.ofPattern("HH-mm-ss.SSS", Locale.TRADITIONAL_CHINESE);
		result = formatter.format(localTime);
		System.out.println(result);
		assertEquals("09-08-07.123", result);
	}
09:08:07
09:08:07.123456789
09:08:07.123
09-08-07.123

ofLocalizedDate

Java Initialize DateTimeFormatter 建立一個 DateTimeFormatter ,提供本地化樣版,使用 FormatStyle 格式化日期時間。

	@Test
	public void ofLocalizedDate() {
		LocalDateTime localDateTime = LocalDateTime.parse("2023-03-14T09:08:07.123456789");
		DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
		String result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023年3月14日 星期二", result);

		formatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG);
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("上午09時08分07秒", result);

		formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023年3月14日 上午09時08分07秒", result);

		formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM, FormatStyle.SHORT);
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023/3/14 上午 9:08", result);
	}
2023年3月14日 星期二
上午09時08分07秒
2023年3月14日 上午09時08分07秒
2023/3/14 上午 9:08

DateTimeFormatterMethodsTest.java

DateTimeFormatter Methods in Java 新增單元測試,驗證 DateTimeFormatter Functions in Java 是否符合預期。

package org.ruoxue.java_147.datetime.datetimeformatter;

import static org.junit.Assert.*;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;

import org.junit.Test;

public class DateTimeFormatterMethodsTest {

	@Test
	public void ofPattern() {
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
		String result = formatter.format(LocalDateTime.now());
		System.out.println(result);

		formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		result = formatter.format(LocalDate.now());
		System.out.println(result);

		formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
		result = formatter.format(LocalTime.now());
		System.out.println(result);
	}

	@Test
	public void format() {
		LocalDateTime localDateTime = LocalDateTime.parse("2023-03-14T09:08:07.123456789");
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
		String result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023-03-14T09:08:07", result);

		formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS");
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023-03-14T09:08:07.123456789", result);

		formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023-03-14T09:08:07.123", result);

		formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.TRADITIONAL_CHINESE);
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023-03-14T09:08:07.123", result);
	}

	@Test
	public void formatLocalDate() {
		LocalDate localDate = LocalDate.parse("2023-03-14");
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		String result = formatter.format(localDate);
		System.out.println(result);
		assertEquals("2023-03-14", result);

		formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
		result = formatter.format(localDate);
		System.out.println(result);
		assertEquals("20230314", result);

		formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd", Locale.TRADITIONAL_CHINESE);
		result = formatter.format(localDate);
		System.out.println(result);
		assertEquals("2023/03/14", result);
	}

	@Test
	public void formatLocalTime() {
		LocalTime localTime = LocalTime.parse("09:08:07.123456789");
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
		String result = formatter.format(localTime);
		System.out.println(result);
		assertEquals("09:08:07", result);

		formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSSSSS");
		result = formatter.format(localTime);
		System.out.println(result);
		assertEquals("09:08:07.123456789", result);

		formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS");
		result = formatter.format(localTime);
		System.out.println(result);
		assertEquals("09:08:07.123", result);

		formatter = DateTimeFormatter.ofPattern("HH-mm-ss.SSS", Locale.TRADITIONAL_CHINESE);
		result = formatter.format(localTime);
		System.out.println(result);
		assertEquals("09-08-07.123", result);
	}

	@Test
	public void ofLocalizedDate() {
		LocalDateTime localDateTime = LocalDateTime.parse("2023-03-14T09:08:07.123456789");
		DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
		String result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023年3月14日 星期二", result);

		formatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG);
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("上午09時08分07秒", result);

		formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023年3月14日 上午09時08分07秒", result);

		formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM, FormatStyle.SHORT);
		result = formatter.format(localDateTime);
		System.out.println(result);
		assertEquals("2023/3/14 上午 9:08", result);
	}
}

心得分享

DateTimeFormatter Functions in Java 是執行緒安全且不可變的,解析與格式化 TemporalAccessor 類別,熟悉 DateTimeFormatter Methods in Java 這些方法的操作,介紹 ofPattern 、 format 等常見方法的操作範例。

發佈留言