My開発メモ

DateTimeFormatterのuuuuとは何か

DateTimeFormatterの使い方を調べてたら、以下のような記述があった。

‘A’から’Z’および’a’から’z’のすべての文字は、パターン文字として予約されています。次のパターン文字が定義されています。
Symbol Meaning Presentation Examples
—— ——- ———— ——-
G era text AD; Anno Domini; A
u year year 2004; 04
y year-of-era year 2004; 04

クラスDateTimeFormatter (Java SE 8)
書式設定および解析用のパターン
https://docs.oracle.com/javase/jp/8/docs/api/java/time/format/DateTimeFormatter.html

書式の指定は “yyyy/MM/dd” とかだと思いきや、”uuuu/MM/dd” という指定もあるらしい。

“year-of-era” は、Google翻訳だと 「年号」という意味だそうで、意味がわからん。

そこで、以下のようなコードを書いて、調べた。

package test.uuuu;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class UuuuTest {

	public static void main(String[] args) {
		DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy/MM/dd");
		DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("G yyyy/MM/dd");
		DateTimeFormatter fmt3 = DateTimeFormatter.ofPattern("uuuu/MM/dd");
		LocalDate now = LocalDate.of(1999, 7, 21);
		String nowText1 = now.format(fmt1);
		String nowText2 = now.format(fmt2);
		String nowText3 = now.format(fmt3);
		System.out.println(nowText1);
		System.out.println(nowText2);
		System.out.println(nowText3);
	}
}
実行結果

1999/07/21
西暦 1999/07/21
1999/07/21

今度は、マイナス年を指定してみた。

package test.uuuu;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class UuuuTest {

	public static void main(String[] args) {
		DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy/MM/dd");
		DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("G yyyy/MM/dd");
		DateTimeFormatter fmt3 = DateTimeFormatter.ofPattern("uuuu/MM/dd");
		LocalDate now = LocalDate.of(-234, 7, 21);
		String nowText1 = now.format(fmt1);
		String nowText2 = now.format(fmt2);
		String nowText3 = now.format(fmt3);
		System.out.println(nowText1);
		System.out.println(nowText2);
		System.out.println(nowText3);
	}
}
実行結果

0235/07/21
紀元前 0235/07/21
-0234/07/21

結論

“uuuu”を使うべきなのかな。

参考

Java8のDate and Time APIではyyyyじゃなくてuuuuを使う

カテゴリー: Java, memo

タグ: DateTimeFormatter, format, uuuu, yyyy

カウント: 349