1. 2026年5月19日 を 2 桁ゼロ埋めで書式化する
  2. 1 桁の月日 (1月1日) もゼロ埋めで 01 月 01 日になる
  3. 2 桁の月日 (12月31日) はそのまま 12 月 31 日になる
  4. うるう年の 2 月 29 日も正しく書式化される
コース一覧
Java 中級:コレクション・Stream・例外処理
日付の書式化とパース

Java 中級:コレクション・Stream・例外処理

コレクション、ジェネリクス、例外処理、Stream API、関数型インターフェース、日付処理、ファイル I/O、継承など Java の中級トピックを実践的に学べるコースです。Java の基礎文法とオブジェクト指向を理解している学習者を対象に、現場の Java コードを読み書きするための知識を補強します。約 16 時間 (1 日 30 分 × 32 日) で 64 レッスンを修了でき、修了後は Spring Boot や業務システム開発に必要な Java 力が身につきます。

1
コレクション基礎
01. ArrayList を使う5分
02. List を走査する5分
03. 要素の削除と検索5分
04. HashMap の基本5分
05. Map を走査する5分
06. Set で重複を排除5分
07. Collections クラスの便利メソッド5分
08. コレクション基礎 まとめクイズ5分
2
ジェネリクス
01. ジェネリッククラスを作る5分
02. ジェネリックメソッド5分
03. 境界型パラメータ5分
04. ワイルドカード ?5分
05. Pair<K,V> を作る5分
06. ジェネリクス まとめクイズ5分
3
例外処理
01. try-catch で例外をつかむ5分
02. 複数の catch ブロック5分
03. throws と例外の伝播5分
04. 独自の例外を作る5分
05. try-with-resources5分
06. finally ブロック5分
07. 例外処理 まとめクイズ5分
4
Stream API
01. Stream を作る5分
02. filter で絞り込む5分
03. map で変換する5分
04. reduce で集約する5分
05. collect で集める5分
06. sorted で並び替え5分
07. distinct で重複排除5分
08. limit と skip5分
09. 並列ストリーム5分
10. Stream API まとめクイズ5分
5
関数型インターフェース
01. ラムダ式の基本5分
02. メソッド参照 ::5分
03. Function インターフェース5分
04. Predicate インターフェース5分
05. Consumer と Supplier5分
06. BiFunction と 2 引数の関数5分
07. 関数型インターフェース まとめクイズ5分
6
文字列操作
01. String.format で書式化5分
02. StringBuilder で連結5分
03. 正規表現の基本5分
04. split と join5分
05. 文字列操作 まとめクイズ5分
7
日付と時刻
01. LocalDate で日付を扱う5分
02. LocalDateTime で時刻も扱う5分
03. Duration で時間差を計算5分
04. 日付の書式化とパース5分
05. 日付の加減算5分
06. 日付と時刻 まとめクイズ5分
8
ファイル I/O
01. Files でファイルに書き込む5分
02. ファイルを行単位で読む5分
03. Path でファイルパスを扱う5分
04. BufferedReader と Stream API5分
05. ファイルの存在確認と削除5分
06. ファイル I/O まとめクイズ5分
9
継承とポリモーフィズム
01. extends で継承する5分
02. super で親を呼ぶ5分
03. メソッドのオーバーライド5分
04. abstract で抽象クラス5分
05. interface で契約を定義5分
06. default メソッド5分
07. instanceof と型パターン5分
08. ポリモーフィズムを活かす5分
09. 継承とポリモーフィズム まとめクイズ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 すること

入出力例

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日"

ヒント

`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 択クイズで確認する。

  • Files でファイルに書き込む

    Java の標準ライブラリ `java.nio.file.Files` を使って、ファイルへの書き込みと読み込みをわずか数行で実現する方法を学ぼう。

  • extends で継承する

    Java の `extends` キーワードを使った継承の基本を学び、`Animal` を継承した `Dog` クラスを作って `Dog.bark()` の結果を返すコードを書いてみよう。

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

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

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

メモ

日付の書式化とパース

⌘S で保存