2026.10.29Java応用 #23|日付・時刻の扱い方TECH BLOG

Java応用 #23|日付・時刻の扱い方!LocalDate・LocalTime・LocalDateTimeを学ぼう

この記事でわかること

  • Javaで日付や時刻を扱う方法
  • LocalDate・LocalTime・LocalDateTimeの違い
  • 現在の日付や時刻を取得する方法
  • 日付や時刻を加算・減算する方法
  • 日付や時刻を指定した形式で表示する方法

Javaで日付や時刻を扱うには?

プログラムでは、日付や時刻を扱う場面がよくあります。

  • 商品の注文日を記録する
  • 予約日時を管理する
  • 会員の登録日を保存する
  • イベントの開催日を表示する

このような処理を行うとき、日付を単なる文字列として管理するだけでは、日付の加算や比較などが難しくなります。

Javaでは、日付や時刻を扱うためのクラスが用意されています。

今回は、Java 8以降で利用できる日付・時刻APIの中から、LocalDate・LocalTime・LocalDateTimeを中心に学習しましょう。


① LocalDateとは?

LocalDateは、日付を扱うためのクラスです。

年・月・日の情報を管理できますが、時刻の情報は持ちません。

まずは、現在の日付を取得してみましょう。

import java.time.LocalDate;

public class Main {

    public static void main(String[] args) {

        LocalDate today = LocalDate.now();

        System.out.println(today);

    }

}

LocalDate.now()は、実行環境の現在の日付を取得します。

例えば、2026年10月27日に実行した場合、実行結果は次のようになります。

2026-10-27

実行結果は、プログラムを動かした日付によって変わります。


② 日付を指定して作成する

現在の日付だけでなく、特定の日付を指定してLocalDateを作成することもできます。

LocalDate date = LocalDate.of(2026, 12, 25);

System.out.println(date);

実行結果

2026-12-25

of()では、年・月・日を指定します。

LocalDate.of(年, 月, 日);

日付を指定する際は、実在する日付を指定する必要があります。不正な日付を指定すると、DateTimeExceptionが発生します。


③ getYear()・getMonthValue()・getDayOfMonth()

LocalDateから、年・月・日の情報を個別に取り出すこともできます。

LocalDate date = LocalDate.of(2026, 12, 25);

System.out.println(date.getYear());
System.out.println(date.getMonthValue());
System.out.println(date.getDayOfMonth());

実行結果

2026
12
25
  • getYear() → 年を取得する
  • getMonthValue() → 月を数値で取得する
  • getDayOfMonth() → 日を取得する

なお、getMonth()を使用すると、月を数値ではなくMonth型の値として取得できます。


④ LocalTimeとは?

LocalTimeは、時刻を扱うためのクラスです。

時・分・秒などの情報を管理できますが、日付の情報は持ちません。

import java.time.LocalTime;

public class Main {

    public static void main(String[] args) {

        LocalTime now = LocalTime.now();

        System.out.println(now);

    }

}

LocalTime.now()は、実行環境の現在の時刻を取得します。

時刻は実行したタイミングによって変わるため、実行結果は一定ではありません。

特定の時刻を指定する場合は、of()を使用します。

LocalTime time = LocalTime.of(14, 30);

System.out.println(time);

実行結果

14:30

LocalTime.of(14, 30)では、14時30分を表す時刻を作成しています。


⑤ LocalDateTimeとは?

LocalDateTimeは、日付と時刻の両方を扱うためのクラスです。

import java.time.LocalDateTime;

public class Main {

    public static void main(String[] args) {

        LocalDateTime now = LocalDateTime.now();

        System.out.println(now);

    }

}

実行結果の例は次のとおりです。

2026-10-27T14:30:15.123

実際の表示は、実行した日時によって変わります。

日付と時刻を指定して作成することもできます。

LocalDateTime dateTime =
        LocalDateTime.of(2026, 12, 25, 14, 30);

System.out.println(dateTime);

実行結果

2026-12-25T14:30

この例では、2026年12月25日の14時30分を表しています。


3つのクラスの違い

  • LocalDate → 日付を扱う
  • LocalTime → 時刻を扱う
  • LocalDateTime → 日付と時刻の両方を扱う

何を管理したいのかによって、使うクラスを選びましょう。


⑥ 日付を加算・減算する

LocalDateでは、日付を加算・減算することができます。

LocalDate date = LocalDate.of(2026, 12, 25);

System.out.println(date.plusDays(7));
System.out.println(date.minusDays(7));

実行結果

2027-01-01
2026-12-18
  • plusDays() → 指定した日数を加算する
  • minusDays() → 指定した日数を減算する

月や年を加算・減算するメソッドもあります。

date.plusMonths(1);
date.minusMonths(1);

date.plusYears(1);
date.minusYears(1);

例えば、予約日の1週間後や、契約日の1年後などを計算する場合に利用できます。

なお、LocalDateは不変オブジェクトです。plusDays()などを呼び出しても、元の日付が直接変更されるわけではありません。結果を変数に保存する場合は、戻り値を受け取ります。

LocalDate nextWeek = date.plusDays(7);

⑦ 日付を比較する

2つの日付を比較するには、isBefore()やisAfter()などのメソッドを利用できます。

LocalDate date1 = LocalDate.of(2026, 10, 1);
LocalDate date2 = LocalDate.of(2026, 12, 1);

System.out.println(date1.isBefore(date2));
System.out.println(date1.isAfter(date2));
System.out.println(date1.isEqual(date2));

実行結果

true
false
false
  • isBefore() → 指定した日付より前かどうか
  • isAfter() → 指定した日付より後かどうか
  • isEqual() → 同じ日付かどうか

イベントの日付が今日より前か、期限が過ぎているかなどを判定する場合に利用できます。


⑧ 日付を指定した形式で表示する

日付を扱う場合、標準の「2026-12-25」という形式ではなく、「2026年12月25日」のように表示したいことがあります。

そのような場合は、DateTimeFormatterを利用します。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Main {

    public static void main(String[] args) {

        LocalDate date = LocalDate.of(2026, 12, 25);

        DateTimeFormatter formatter =
                DateTimeFormatter.ofPattern("yyyy年MM月dd日");

        System.out.println(date.format(formatter));

    }

}

実行結果

2026年12月25日

ofPattern()では、表示したい形式を指定します。

  • yyyy → 年
  • MM → 月
  • dd → 日
  • HH → 24時間制の時
  • mm → 分
  • ss → 秒

例えば、日付と時刻を表示する場合は、次のように指定できます。

DateTimeFormatter formatter =
        DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

なお、MMは月、mmは分を表します。大文字と小文字を間違えないようにしましょう。


よくある間違い

① LocalDateで時刻も取得できると思ってしまう

LocalDateは日付のみ、LocalTimeは時刻のみを扱います。両方必要な場合はLocalDateTimeを利用します。

② plusDays()を実行すれば元の日付が変わると思う

LocalDateは不変オブジェクトなので、計算結果を利用したい場合は戻り値を受け取ります。

③ 月と分の指定を間違える

DateTimeFormatterでは、MMが月、mmが分です。書式の大文字・小文字に注意しましょう。

④ 日付を文字列だけで計算しようとする

日付の加算や比較を行いたい場合は、文字列ではなくLocalDateなどの日付型を利用すると便利です。


まとめ

  • LocalDateは日付を扱う
  • LocalTimeは時刻を扱う
  • LocalDateTimeは日付と時刻の両方を扱う
  • now()で現在の日付や時刻を取得できる
  • of()で特定の日付や時刻を指定できる
  • plusDays()やminusDays()で日付を加算・減算できる
  • isBefore()やisAfter()で日付を比較できる
  • DateTimeFormatterで表示形式を指定できる

日付・時刻APIを利用すると、予約管理や期限管理など、実際の業務でも必要となる処理を作りやすくなります。

次回は、Javaでファイルを読み書きするファイル操作について学習します。