カテゴリ: Java 更新日: 2026/05/06

JavaのChronoUnit.YEARSとbetweenメソッドの使い方を徹底解説!年数計算を初心者向けにわかりやすく説明

ChronoUnit.YEARSのbetweenメソッド
ChronoUnit.YEARSのbetweenメソッド

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

生徒

「Javaで生年月日から年齢を計算したいんですが、簡単な方法はありますか?」

先生

「Javaでは、ChronoUnit.YEARSbetweenメソッドを使うことで、開始日と終了日の年数差を簡単に求めることができます。」

生徒

「日付の差を自分で計算しなくてもいいんですか?」

先生

「はい。Javaの日時APIを使えば、安全で正確に年数計算ができます。年齢計算や勤続年数の計算でもよく使われています。」

生徒

「初心者でも使えますか?」

先生

「もちろんです。それでは、基本から順番に見ていきましょう。」

1. ChronoUnit.YEARSとは?

「1. ChronoUnit.YEARSとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. ChronoUnit.YEARSとは?
1. ChronoUnit.YEARSとは?

ChronoUnit.YEARSは、Javaの日時APIであるjava.timeパッケージに含まれている機能です。 主に「年単位の差」を求めるときに利用されます。

Java初心者の方は、年齢計算や入社年数の計算をするときに、 自分で年数を計算しようとして複雑なコードを書いてしまうことがあります。 しかし、ChronoUnit.YEARSを使えば、開始日と終了日の差を簡単に取得できます。

特にJavaの最新日時APIは、古いDateクラスやCalendarクラスよりも安全で読みやすく、 Javaプログラミング初心者にもおすすめされています。

ポイント
ChronoUnit.YEARSは「何年差があるか」を取得するための定数です。

2. betweenメソッドとは?

2. betweenメソッドとは?
2. betweenメソッドとは?

betweenメソッドは、二つの日付や時間の差を取得するためのメソッドです。 Javaの日付計算では非常によく使われます。

基本構文は次のようになります。


ChronoUnit.YEARS.between(開始日, 終了日);

このコードを実行すると、「開始日から終了日までに何年あるか」を取得できます。

Javaで日付差分を求めたい場合、 betweenメソッドは非常に便利です。 年だけではなく、月、日、時間、分なども取得できます。

よく使う単位
YEARS:年
MONTHS:月
DAYS:日
HOURS:時間

3. 年数差を計算する基本サンプル

3. 年数差を計算する基本サンプル
3. 年数差を計算する基本サンプル

まずは、もっとも基本的なサンプルを見てみましょう。 Javaで二つの日付の年数差を求める方法です。


import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class ChronoUnitExample {
    public static void main(String[] args) {

        LocalDate startDate = LocalDate.of(2015, 4, 1);
        LocalDate endDate = LocalDate.of(2025, 4, 1);

        long years = ChronoUnit.YEARS.between(startDate, endDate);

        System.out.println("年数差:" + years);
    }
}

このプログラムでは、二つの日付を比較して年数差を取得しています。 LocalDateは「年月日」を扱うためのクラスです。

ChronoUnit.YEARS.betweenを使うことで、 複雑な計算をせずに簡単に年数差を取得できます。


年数差:10

Javaの年数計算では、この書き方が非常によく使われます。

4. 年齢を計算する方法

「4. 年齢を計算する方法」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. 年齢を計算する方法
4. 年齢を計算する方法

JavaでChronoUnit.YEARSがよく使われる場面の一つが「年齢計算」です。

生年月日から現在の年齢を取得するプログラムを書いてみましょう。


import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class AgeCalculation {
    public static void main(String[] args) {

        LocalDate birthday = LocalDate.of(2000, 5, 10);
        LocalDate today = LocalDate.now();

        long age = ChronoUnit.YEARS.between(birthday, today);

        System.out.println("現在の年齢:" + age);
    }
}

このサンプルでは、現在の日付をLocalDate.now()で取得しています。 その後、生年月日との差を年単位で計算しています。

Java初心者でも、この方法なら簡単に年齢計算ができます。 業務システムや会員登録システムでもよく利用されています。


現在の年齢:25

5. マイナスの値になる場合

5. マイナスの値になる場合
5. マイナスの値になる場合

betweenメソッドでは、開始日と終了日の順番に注意が必要です。

もし開始日より終了日が前の場合、結果はマイナスになります。


import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class MinusYearsExample {
    public static void main(String[] args) {

        LocalDate futureDate = LocalDate.of(2030, 1, 1);
        LocalDate today = LocalDate.now();

        long years = ChronoUnit.YEARS.between(futureDate, today);

        System.out.println("年数差:" + years);
    }
}

年数差:-3

このように、開始日が未来の日付になっている場合はマイナス値が返されます。

Javaの日付計算では、開始日と終了日の順番を間違えないように注意しましょう。

6. YEARS以外にも使える単位

6. YEARS以外にも使える単位
6. YEARS以外にも使える単位

ChronoUnitには、YEARS以外にもさまざまな単位があります。

Javaで日時計算をするときは、用途に応じて使い分けることが重要です。


import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class DateDifferenceExample {
    public static void main(String[] args) {

        LocalDate startDate = LocalDate.of(2024, 1, 1);
        LocalDate endDate = LocalDate.of(2025, 5, 1);

        long months = ChronoUnit.MONTHS.between(startDate, endDate);
        long days = ChronoUnit.DAYS.between(startDate, endDate);

        System.out.println("月数差:" + months);
        System.out.println("日数差:" + days);
    }
}

月数差:16
日数差:486

このように、Javaでは月数や日数も簡単に取得できます。

単位 内容
YEARS 年数を取得
MONTHS 月数を取得
DAYS 日数を取得
HOURS 時間を取得

7. LocalDateと一緒に使う理由

「7. LocalDateと一緒に使う理由」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. LocalDateと一緒に使う理由
7. LocalDateと一緒に使う理由

ChronoUnit.YEARSは、 主にLocalDateと組み合わせて使用されます。

LocalDateは、Javaの日時APIで日付のみを扱うクラスです。 時間情報を含まないため、誕生日や入社日などの管理に向いています。

Java初心者の方は、 古いDateクラスを使ってしまうことがありますが、 現在ではLocalDateを使う方法が推奨されています。


import java.time.LocalDate;

public class LocalDateExample {
    public static void main(String[] args) {

        LocalDate today = LocalDate.now();

        System.out.println(today);
    }
}

2026-05-06

Javaの日付操作では、 LocalDateChronoUnitをセットで覚えると非常に便利です。

8. ChronoUnit.YEARSを使うときの注意点

8. ChronoUnit.YEARSを使うときの注意点
8. ChronoUnit.YEARSを使うときの注意点

JavaでChronoUnit.YEARSを使うときには、 いくつか注意点があります。

一つ目は、「完全な年数」が返されることです。

例えば、二つの日付の差が九年十一か月だった場合、 結果は九になります。

二つ目は、開始日と終了日の順番です。 順番が逆になるとマイナス値が返されます。

三つ目は、日時ではなく「日付」で計算するケースが多いことです。 時間単位まで必要ない場合は、 LocalDateを使う方がシンプルでわかりやすくなります。

注意
betweenメソッドは「完全な年数」を返します。
端数は自動的に切り捨てられます。

Javaの日時計算は難しく感じやすいですが、 ChronoUnit.YEARSbetweenメソッドを使えば、 シンプルかつ安全に実装できます。

年齢計算、勤続年数計算、契約期間計算など、 実務でも利用頻度が高いので、ぜひ覚えておきましょう。

まとめ

まとめ
まとめ

今回は、Javaの日時APIであるChronoUnit.YEARSbetweenメソッドの使い方について詳しく学びました。 Java初心者の方にとって、日付や時間の計算は難しく感じやすい部分ですが、 Javaのjava.timeパッケージを利用することで、 安全かつ正確に年数計算を行うことができます。

特に、Javaで年齢計算を行いたい場合や、 入社年数、契約期間、利用期間などを求めたい場合には、 ChronoUnit.YEARS.betweenが非常に便利です。 開始日と終了日を指定するだけで、 年単位の差分を簡単に取得できるため、 複雑な計算式を書く必要がありません。

Javaの古い日時クラスであるDateCalendarは、 記述が複雑になりやすく、 初心者には扱いづらい場面がありました。 しかし、現在のJavaでは、 LocalDateChronoUnitを利用する方法が推奨されています。

Javaの日時計算では、 「年数差を取得したいのか」 「月数差を取得したいのか」 「日数差を取得したいのか」 を明確にしておくことが大切です。

例えば、 ChronoUnit.YEARSを使えば年数差、 ChronoUnit.MONTHSを使えば月数差、 ChronoUnit.DAYSを使えば日数差を取得できます。 Javaでは、このように単位ごとに柔軟な日時計算が可能です。

覚えておきたいポイント
Javaで年齢計算や年数計算を行う場合は、 ChronoUnit.YEARSとbetweenメソッドを組み合わせると、 シンプルで読みやすいコードになります。

年数計算の最終確認サンプル

最後に、Javaの年数計算を復習するためのサンプルプログラムを見てみましょう。 このコードでは、契約開始日から現在までの年数を取得しています。


import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class ContractYearsExample {
    public static void main(String[] args) {

        LocalDate contractDate = LocalDate.of(2020, 4, 1);
        LocalDate today = LocalDate.now();

        long years = ChronoUnit.YEARS.between(contractDate, today);

        System.out.println("契約年数:" + years);
    }
}

契約年数:6

このように、 Javaではわずかなコード量で年数計算を実装できます。 可読性も高く、 保守しやすいプログラムを書くことができます。

betweenメソッドを使うメリット

Javaでbetweenメソッドを使うメリットは非常に多くあります。

メリット 内容
コードが短い 複雑な計算式を書かなくても簡単に日時差分を取得できる
可読性が高い 初心者でも処理内容を理解しやすい
安全性が高い Java標準APIなので安心して利用できる
実務利用が多い 業務システムや会員管理システムでも頻繁に利用される

Javaプログラミングでは、 「読みやすいコードを書くこと」が非常に重要です。 ChronoUnit.YEARS.betweenは、 コードを簡潔にできるため、 チーム開発でも役立ちます。

月数差を取得する復習

Javaの日時APIでは、 年数だけではなく月数差の取得もよく利用されます。 次のサンプルでは、 二つの日付の月数差を求めています。


import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class MonthDifferenceExample {
    public static void main(String[] args) {

        LocalDate startDate = LocalDate.of(2023, 1, 1);
        LocalDate endDate = LocalDate.of(2025, 5, 1);

        long months = ChronoUnit.MONTHS.between(startDate, endDate);

        System.out.println("月数差:" + months);
    }
}

月数差:28

Java初心者の方は、 最初はYEARSだけを覚えれば十分ですが、 慣れてきたらMONTHSやDAYSも活用すると、 より実践的なプログラムを作れるようになります。

Javaの日時APIを学ぶ重要性

Java開発では、 日付や時間を扱う機会が非常に多くあります。

例えば、 会員登録日時、 ログイン日時、 契約開始日、 商品発送日、 予約日時など、 さまざまなシステムで日時管理が必要になります。

そのため、 JavaのLocalDateLocalDateTimeChronoUnitなどを理解しておくことは、 Javaエンジニアとして非常に重要です。

特にJava初心者の方は、 「日付計算が苦手」 「日時処理が難しい」 と感じやすいですが、 Java標準APIを活用すれば、 シンプルに実装できる場面が多くあります。

初心者が覚えておきたいポイント

Javaで年数差を求めるならChronoUnit.YEARS

betweenメソッドで開始日と終了日の差を取得できる

LocalDateと組み合わせると扱いやすい

Javaの日時APIは実務でも非常によく使われる

日付比較を行うサンプル

Javaでは、 日付同士を比較する処理もよく利用されます。 次のサンプルでは、 二つの日付が同じかどうかを確認しています。


import java.time.LocalDate;

public class DateCompareExample {
    public static void main(String[] args) {

        LocalDate date1 = LocalDate.of(2025, 5, 1);
        LocalDate date2 = LocalDate.of(2025, 5, 1);

        System.out.println(date1.equals(date2));
    }
}

true

このように、 Javaの日時APIを利用すると、 比較処理も簡単に書くことができます。

先生と生徒の振り返り会話

生徒

「JavaのChronoUnit.YEARSって、 年数差を簡単に取得できる機能なんですね。」

先生

「その通りです。 Javaのbetweenメソッドを使えば、 開始日と終了日の差を簡単に取得できます。」

生徒

「年齢計算や契約期間の計算にも使えるので、 実務でも便利そうです。」

先生

「はい。 Javaの業務システムでは、 日付計算や日時処理は頻繁に登場します。」

生徒

「LocalDateと組み合わせることで、 コードもかなり読みやすくなると感じました。」

先生

「Java初心者の方は、 まずLocalDate、 ChronoUnit、 betweenメソッドの基本を覚えると、 日時処理をスムーズに理解できるようになります。」

生徒

「これからはJavaで日時計算を書くときに、 ChronoUnit.YEARSを積極的に使ってみます。」

先生

「ぜひ試してみてください。 Javaの日時APIは非常に強力なので、 使いこなせるようになると開発効率が大きく向上します。」

カテゴリの一覧へ
新着記事
New1
Java
JavaのThreadクラスholdsLockメソッド完全ガイド!初心者でもわかる同期とロックの確認方法
新規投稿
New2
Spring
SpringDataJPAのJPAクエリメソッド「NotIn」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「In」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「Not」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとVS Codeで開発を始めよう!拡張機能・launch.json・ホットリロードを丁寧に解説
No.2
Java&Spring記事人気No2
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.3
Java&Spring記事人気No3
Spring
Spring Data JPAのfindAllメソッドの使い方を完全ガイド!検索結果をThymeleafのth:eachで表示
No.4
Java&Spring記事人気No4
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.5
Java&Spring記事人気No5
Java
JavaのExceptionクラスを完全解説!初心者でも理解できる例外処理の基本
No.6
Java&Spring記事人気No6
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.7
Java&Spring記事人気No7
Spring
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.8
Java&Spring記事人気No8
Servlet
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本