日付の書式化とパース
2026-05-19 のまま画面に出すと、日本語の帳票から浮く
LocalDate をそのまま表示すると 2026-05-19 になります。データとして受け渡す分にはこれで完璧ですが、請求書や社内の一覧画面に並べると、そこだけ機械の言葉が混ざったように見えます。かといって String を切り貼りしてスラッシュ区切りに直すと、桁数の調整が自分の仕事に戻ってきてしまいます。
見た目を決める役目は java.time.format.DateTimeFormatter が持っています。ofPattern に「どう並べたいか」を書いた文字列を渡し、format に日付を通すだけです。
Java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Demo {
public static void main(String[] args) {
LocalDate d = LocalDate.of(2026, 5, 19);
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd");
System.out.println(d.format(f)); // 2026/05/19
}
}パターンの中で意味を持つのは英字だけです。yyyy が 4 桁の年、MM が 2 桁の月、dd が 2 桁の日を表します。それ以外の / や .、そして 年 月 日 のような漢字は、書いた位置にそのまま出力されます。区切りを変えたければ、この英字以外の部分を差し替えるだけで済みます。
1 桁で書かれた月を読ませたら、例外で落ちた
同じ DateTimeFormatter は逆向きにも使えます。フォームや CSV から届いた文字列を LocalDate に戻すのが parse です。読み取りたい形をパターンで教えたうえで、第 2 引数に渡します。
Java
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate d = LocalDate.parse("2026/05/19", f);
System.out.println(d.getMonthValue()); // 5ここでの落とし穴は、パターンと入力が一字一句そろっていないと通らないことです。MM は「必ず 2 桁」という指定なので、"2026/5/19" を渡すと DateTimeParseException が飛びます。1 桁の月も受け付けたいなら、パターン側を M 1 文字に変えます。
Java
DateTimeFormatter loose = DateTimeFormatter.ofPattern("yyyy/M/d");
System.out.println(LocalDate.parse("2026/5/19", loose)); // 2026-05-19区切り記号の違いや、前後に紛れ込んだ半角スペースも同じように弾かれます。読み込みが失敗したら、まずパターンと入力を 1 文字ずつ見比べてください。
DateTimeParseExceptionはcatchを書かなくてもコンパイルが通る種類の例外です。自分で書いた固定文字列を読むだけなら放っておいても構いませんが、利用者が入力した値を読むときは必ず受け止めて、どの行が読めなかったのかを返す作りにしてください。
やってみよう
Solution.formatJapaneseDate(int year, int month, int day) を完成させます。
java.time.LocalDateとjava.time.format.DateTimeFormatterをimportする- 受け取った 3 つの数値から
LocalDateを作る 2026年05月19日の形になるパターンでフォーマッタを作り、書式化した結果をreturnする
パターンの中に漢字をそのまま置ける、というのがこの課題の要です。formatJapaneseDate(2024, 1, 1) は "2024年1月1日" ではなく "2024年01月01日" になるので、月と日は 2 桁指定の記号を選んでください。
要件
java.time.LocalDateとjava.time.format.DateTimeFormatterをimportすることDateTimeFormatter.ofPattern("yyyy年MM月dd日")を使い、月・日が必ず 2 桁ゼロ埋めになる書式を指定することLocalDate.of(year, month, day)で日付を作り、date.format(formatter)の結果をreturnすること
入出力例
formatJapaneseDate(2026, 5, 19) → "2026年05月19日"
formatJapaneseDate(2024, 1, 1) → "2024年01月01日"
formatJapaneseDate(2023, 12, 31) → "2023年12月31日"
formatJapaneseDate(2024, 2, 29) → "2024年02月29日"