カテゴリ: Javaの例外処理 更新日: 2025/11/21

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の例外処理の一覧へ
新着記事
FlutterのMVP・MVVMアーキテクチャの違いと使い分け
FlutterのMVP・MVVMアーキテクチャの違いと使い分けを初心者向けに解説!
オニオンアーキテクチャの基本とFlutterでの適用例
オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説
クリーンアーキテクチャとは?Flutterでの導入メリット
クリーンアーキテクチャとは?Flutterでの導入メリットをやさしく解説
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金まとめ
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金を初心者向けに徹底解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

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

UGREEN USB-Cハブを見る

※ Amazon広告リンク