DateTimeFormatterのuuuuとは何か
DateTimeFormatterの使い方を調べてたら、以下のような記述があった。
‘A’から’Z’および’a’から’z’のすべての文字は、パターン文字として予約されています。次のパターン文字が定義されています。
クラスDateTimeFormatter (Java SE 8)
Symbol Meaning Presentation Examples
—— ——- ———— ——-
G era text AD; Anno Domini; A
u year year 2004; 04
y year-of-era year 2004; 04
書式設定および解析用のパターン
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
カウント: 348