コース一覧
    Java中級:文字列・日付・標準ライブラリ
    LocalDateTime で時刻も扱う

    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分

    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 すること

    ヒント

    `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 で保存