コース一覧
    Java中級:文字列・日付・標準ライブラリ
    日付の書式化とパース

    Java中級:文字列・日付・標準ライブラリ

    文字列・日付・時刻と標準ライブラリを学び、よく使うデータ加工や日時処理を適切に実装できるようにします。

    1
    文字列操作
    01. String.format で書式化5分
    02. StringBuilder で連結5分
    03. 正規表現の基本5分
    04. split と join5分
    05. 文字列操作 まとめクイズ5分
    2
    日付と時刻
    01. LocalDate で日付を扱う5分
    02. LocalDateTime で時刻も扱う5分
    03. Duration で時間差を計算5分
    04. 日付の書式化とパース5分
    05. 日付の加減算5分
    06. 日付と時刻 まとめクイズ5分

    日付の書式化とパース

    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) を完成させます。

    1. java.time.LocalDate と java.time.format.DateTimeFormatter を import する
    2. 受け取った 3 つの数値から LocalDate を作る
    3. 2026年05月19日 の形になるパターンでフォーマッタを作り、書式化した結果を return する

    パターンの中に漢字をそのまま置ける、というのがこの課題の要です。formatJapaneseDate(2024, 1, 1) は "2024年1月1日" ではなく "2024年01月01日" になるので、月と日は 2 桁指定の記号を選んでください。

    要件

    1. java.time.LocalDate と java.time.format.DateTimeFormatter を import すること
    2. DateTimeFormatter.ofPattern("yyyy年MM月dd日") を使い、月・日が必ず 2 桁ゼロ埋めになる書式を指定すること
    3. LocalDate.of(year, month, day) で日付を作り、date.format(formatter) の結果を return すること

    ヒント

    `MM` は 2 桁の月、`dd` は 2 桁の日です。`mm` は分なので間違えないよう注意してください

    `String.format` で自前にゼロ埋めしなくても、`DateTimeFormatter` が `MM` `dd` で自動的に `01` のような形にしてくれます

    書式化は `date.format(formatter)` でも `formatter.format(date)` でも同じ結果になります。覚えやすい方を使いましょう

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

    関連レッスン

    • 日付の加減算

      LocalDate の plusDays や minusDays を使って日付を前後に動かす方法を学び、不変オブジェクトとしての扱い方を身につけよう。

    • 日付と時刻 まとめクイズ

      Java 8 で導入された java.time パッケージ (LocalDate / LocalDateTime / Duration / Period / DateTimeFormatter / 加減算) の総まとめ。不変性 (immutable)、ChronoUnit、parse/format の対称性など実務頻出のポイントを 4 択クイズで確認する。

    • Duration で時間差を計算

      `Duration` と `Period`、`ChronoUnit.between` の違いを整理しながら、2 つの日付の差を日数で計算するメソッドを書いてみよう。

    • LocalDateTime で時刻も扱う

      前回学んだ LocalDate に時刻を加えた LocalDateTime を使い、DateTimeFormatter で日付と時刻を任意の形式に書式化する流れを身につけよう。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • フォームinput(text, email, password, checkbox, radio)、select、textarea、button。
    • 引数位置引数=順番で渡す。
    • コンパイルソースをバイトコードへ変換する処理
    main.java
    エディタを読み込んでいます

    メモ

    日付の書式化とパース

    ⌘S で保存