カテゴリ: Javaの例外処理 更新日: 2026/05/06

JavaのDurationとPeriodの使い方を完全ガイド!日付の差を正確に求める方法

362
Java の2つの日付の差を求める方法(Duration と Period)

先生と生徒の会話形式で理解しよう

生徒

「Javaで2つの日付の差を調べたいんですけど、どうすればいいですか?」

先生

「JavaにはDurationPeriodという2つのクラスがあって、それを使えば簡単に日付や時間の差分が求められますよ。」

生徒

「その2つって何が違うんですか?」

先生

「それじゃあ、DurationPeriodの違いと使い方を詳しく解説していきましょう!」

1. Javaで日付の差を求めるには?

1. Javaで日付の差を求めるには?
1. Javaで日付の差を求めるには?

Javaで2つの日付の差を求めるには、java.timeパッケージに含まれるDurationクラスとPeriodクラスを使います。Javaの例外処理では時間操作もよく使うため、これらのクラスの理解は非常に重要です。

Durationは「時間の差分」をミリ秒や秒、分、時間単位で扱うのに対して、Periodは「日付の差分」を年・月・日単位で扱います。

2. Durationクラスの使い方(時間の差を求める)

2. Durationクラスの使い方(時間の差を求める)
2. Durationクラスの使い方(時間の差を求める)

Durationクラスは、LocalTimeLocalDateTimeなどの時間を扱うクラスと一緒に使います。ミリ秒・秒・分・時間の差を扱いたいときに便利です。

たとえば、2つの日時の差を秒単位で取得するには以下のように書きます。


import java.time.Duration;
import java.time.LocalDateTime;

public class DurationExample {
    public static void main(String[] args) {
        LocalDateTime start = LocalDateTime.of(2023, 1, 1, 12, 0);
        LocalDateTime end = LocalDateTime.of(2023, 1, 1, 14, 30);

        Duration duration = Duration.between(start, end);

        System.out.println("時間差:" + duration.toHours() + " 時間");
        System.out.println("分差:" + duration.toMinutes() + " 分");
        System.out.println("秒差:" + duration.getSeconds() + " 秒");
    }
}

時間差:2 時間
分差:150 分
秒差:9000 秒

このようにDurationを使えば、時間単位での差分を柔軟に取得できます。

3. Periodクラスの使い方(日付の差を求める)

3. Periodクラスの使い方(日付の差を求める)
3. Periodクラスの使い方(日付の差を求める)

Periodクラスは、LocalDateクラスと一緒に使い、2つの日付の差を「年・月・日」の単位で計算します。日付の計算やスケジュール管理などでよく使われます。

次のコードでは、2つの日付の差分を取得しています。


import java.time.LocalDate;
import java.time.Period;

public class PeriodExample {
    public static void main(String[] args) {
        LocalDate startDate = LocalDate.of(2020, 5, 10);
        LocalDate endDate = LocalDate.of(2023, 9, 1);

        Period period = Period.between(startDate, endDate);

        System.out.println("年差:" + period.getYears() + " 年");
        System.out.println("月差:" + period.getMonths() + " ヶ月");
        System.out.println("日差:" + period.getDays() + " 日");
    }
}

年差:3 年
月差:3 ヶ月
日差:22 日

Periodは「年・月・日」の差を求めたいときに最適です。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. DurationとPeriodの違いを整理しよう

4. DurationとPeriodの違いを整理しよう
4. DurationとPeriodの違いを整理しよう

初心者が混乱しやすいポイントがDurationPeriodの違いです。以下にまとめます。

  • DurationLocalDateTimeInstantなどの日時型に使う。ミリ秒・秒・分・時間単位。
  • PeriodLocalDateなどの日付型に使う。年・月・日単位。

どちらもJavaの時間操作に欠かせないクラスです。用途に応じて正しく使い分けましょう。

5. DurationやPeriodと例外処理を組み合わせるには?

5. DurationやPeriodと例外処理を組み合わせるには?
5. DurationやPeriodと例外処理を組み合わせるには?

Javaで例外処理と組み合わせて日付の差を安全に取得することも可能です。たとえば、ユーザーが入力した日時が無効だった場合にはDateTimeParseExceptionなどをキャッチしてエラーハンドリングを行います。


import java.time.*;
import java.time.format.DateTimeParseException;

public class DateDiffWithException {
    public static void main(String[] args) {
        try {
            LocalDateTime start = LocalDateTime.parse("2023-01-01T10:00:00");
            LocalDateTime end = LocalDateTime.parse("2023-01-01T12:45:00");

            Duration d = Duration.between(start, end);
            System.out.println("差:" + d.toMinutes() + " 分");
        } catch (DateTimeParseException e) {
            System.out.println("日付の形式が正しくありません: " + e.getMessage());
        }
    }
}

差:165 分

このように、例外処理を活用することで、ユーザー入力やAPIの戻り値にも柔軟に対応できます。

6. Javaの日付操作に便利なその他のクラス

6. Javaの日付操作に便利なその他のクラス
6. Javaの日付操作に便利なその他のクラス

日付の差を求める以外にも、Javaには便利な日付操作クラスがいくつか存在します。

  • ChronoUnit:日付や時間の差を任意の単位で取得
  • TemporalAdjusters:次の月初や月末などに日付を調整
  • DateTimeFormatter:日付のフォーマット変換

Javaでの時間処理は業務システムでもよく使う機能なので、これらのクラスも一緒に覚えておくと便利です。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaで2つの日付の差分を求めるには、どのような方法が推奨されていますか?

Javaで日付や時間の差を正確に計算するには、java.timeパッケージに含まれる「Duration(デュレーション)」クラスと「Period(ピリオド)」クラスを使用するのが標準的かつ推奨される方法です。かつてのJavaでは日付操作が複雑でしたが、現代のJava 8以降のDate and Time API(日時API)を利用することで、秒単位の細かい時間差から、年単位の大きな日付差まで、直感的かつ安全にプログラムコードで実装することが可能になっています。初心者の方は、まずこの2つのクラスの使い分けを覚えることが、日付操作マスターへの第一歩となります。
Javaの例外処理の一覧へ
新着記事
Java
Javaの演算子の優先順位
Javaの演算子の優先順位を完全解説!初心者向けの丁寧な解説
Java
Javaのローカル変数と順次処理
Javaのローカル変数と順次処理を徹底解説!初心者でも理解できるコードの基本
Python
NumPyのdtype一覧!int・float・bool・str・objectの違いを比較
NumPyのdtype一覧を完全解説!int・float・bool・str・objectの違いを初心者向けに比較
Dart
Dartのコンストラクタまとめ!デフォルト・名前付きコンストラクタの使い方
Dartのコンストラクタまとめ完全ガイド!デフォルトコンストラクタと名前付きコンストラクタの使い方を初心者向けに解説
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
Flutter
Flutter SDKのダウンロードとインストール手順を詳しく解説
Flutter SDKのダウンロードとインストール手順を丁寧ガイド!初心者でも安心な環境構築

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク