1. 2026 年 5 月 19 日 14:30 を YYYY-MM-DD HH:MM 形式に書式化する
  2. 1 桁の月日時分が 0 埋めされて 2024-01-01 00:00 になる
  3. 年末の 23 時 59 分が 2025-12-31 23:59 になる
  4. うるう年 2 月 29 日の正午は 2024-02-29 12:00 になる
コース一覧
Java 中級:コレクション・Stream・例外処理
LocalDateTime で時刻も扱う

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分

LocalDateTime で時刻も扱う

同じ時刻が2つの顔を持つ

予約の日は分かるのに、何時からかが分からない

LocalDate が持っているのは年月日だけです。誕生日や記念日ならそれで足りますが、「1 月 20 日 9 時 5 分から会議室 A」のような予定を保存しようとした瞬間に手詰まりになります。時刻を別の int 変数で持ち回る手もありますが、日付だけ更新して時刻を直し忘れる、という事故が必ず起きます。

日付と時刻をひとつの値にまとめた型が java.time.LocalDateTime です。作り方は LocalDate と同じで、static メソッドの of に渡す引数が後ろに 2 つ増えるだけです。

Java

import java.time.LocalDateTime; public class Demo { public static void main(String[] args) { LocalDateTime meeting = LocalDateTime.of(2026, 1, 20, 9, 5); System.out.println(meeting); // 2026-01-20T09:05 System.out.println(meeting.getHour()); // 9 System.out.println(meeting.getMinute()); // 5 } }

時は 0 から 23 の 24 時間制、分は 0 から 59 です。秒まで指定したいときは of(年, 月, 日, 時, 分, 秒) という 6 引数の形もあります。

表示すると、真ん中に T が挟まる

そのまま出力すると 2026-01-20T09:05 になります。機械同士でやり取りする分には便利な形ですが、画面に出すには無骨です。並びを自分で決めたいときは DateTimeFormatter を使い、ofPattern に並べた記号が実際の値に置き換わります。

Java

import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; LocalDateTime meeting = LocalDateTime.of(2026, 1, 20, 14, 5); DateTimeFormatter f = DateTimeFormatter.ofPattern("MM/dd HH:mm"); System.out.println(meeting.format(f)); // 01/20 14:05

ここで使った記号は 4 つだけです。MM が月、dd が日、HH が時、mm が分を表します。

hh と書くと、14 時が 02 になる

この記号は大文字と小文字が別物です。しかも取り違えても文法としては正しいので、コンパイルは通ってしまいます。実際によく踏むのは次の 2 つです。

  • MM は月、mm は分。日付側に mm と書くと、01/20 のはずが 05/20 のような値になります
  • HH は 24 時間制、hh は 12 時間制。hh にすると 14 時が 02 と表示され、午前か午後か分からない文字列ができあがります

Java

DateTimeFormatter wrong = DateTimeFormatter.ofPattern("MM/dd hh:mm"); System.out.println(meeting.format(wrong)); // 01/20 02:05

どちらも例外は出ません。出来上がった文字列を目で見るまで気づけない種類のバグなので、パターンを書いたら必ず 1 回は出力を確かめてください。

やってみよう

Solution.formatDateTime(int year, int month, int day, int hour, int minute) を完成させます。

  1. import java.time.LocalDateTime; と import java.time.format.DateTimeFormatter; を書く
  2. 受け取った 5 つの数値から LocalDateTime を作る
  3. 年・月・日をハイフンでつなぎ、半角スペースを挟んで、時と分をコロンでつないだ並びのパターンを組み立てて書式化し、return する

formatDateTime(2024, 1, 1, 0, 0) は "2024-01-01 00:00" を返します。年は 4 桁、それ以外は 2 桁固定なので、ゼロ埋めは DateTimeFormatter が自動でやってくれます。

要件

  1. ファイル先頭で import java.time.LocalDateTime; と import java.time.format.DateTimeFormatter; を書くこと
  2. LocalDateTime.of(year, month, day, hour, minute) で日時オブジェクトを生成すること (SimpleDateFormat などの旧 API は使わない)
  3. DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") を使って書式化し、その結果を return すること

入出力例

formatDateTime(2026, 5, 19, 14, 30) → "2026-05-19 14:30" formatDateTime(2024, 1, 1, 0, 0) → "2024-01-01 00:00" formatDateTime(2025, 12, 31, 23, 59) → "2025-12-31 23:59" formatDateTime(2024, 2, 29, 12, 0) → "2024-02-29 12:00"

ヒント

`LocalDateTime` は `new` ではなく `LocalDateTime.of(年, 月, 日, 時, 分)` で作ります。月は 1 始まり (`5` = 5 月) なのでそのまま渡して大丈夫です

パターン文字列は大文字小文字を区別します。`月` は大文字 `MM`、`分` は小文字 `mm`、24 時間制の `時` は大文字 `HH` です。`mm` と `MM` を間違えないように注意してください

`dt.format(fmt)` で `String` が返ります。`String.format` などを別途呼び出す必要はなく、`DateTimeFormatter` が自動で 0 埋めまで面倒を見てくれます

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

関連レッスン

  • Duration で時間差を計算

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

  • 日付の書式化とパース

    DateTimeFormatter.ofPattern() で LocalDate を任意の書式に変換し、逆に文字列から日付へ parse する方法を学ぼう。

  • 日付の加減算

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

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

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

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

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

  • 変数データに名前をつけて参照する仕組み
  • メソッドクラスに属する関数
  • 引数位置引数=順番で渡す。
  • コンパイルソースをバイトコードへ変換する処理
  • オブジェクトキーと値のペアで構造を作るデータ
  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
main.java
学習モード
エディタを読み込んでいます

メモ

LocalDateTime で時刻も扱う

⌘S で保存