JavaのChronoUnit.YEARSとbetweenメソッドの使い方を徹底解説!年数計算を初心者向けにわかりやすく説明
生徒
「Javaで生年月日から年齢を計算したいんですが、簡単な方法はありますか?」
先生
「Javaでは、ChronoUnit.YEARSとbetweenメソッドを使うことで、開始日と終了日の年数差を簡単に求めることができます。」
生徒
「日付の差を自分で計算しなくてもいいんですか?」
先生
「はい。Javaの日時APIを使えば、安全で正確に年数計算ができます。年齢計算や勤続年数の計算でもよく使われています。」
生徒
「初心者でも使えますか?」
先生
「もちろんです。それでは、基本から順番に見ていきましょう。」
1. ChronoUnit.YEARSとは?
「1. ChronoUnit.YEARSとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
ChronoUnit.YEARSは、Javaの日時APIであるjava.timeパッケージに含まれている機能です。
主に「年単位の差」を求めるときに利用されます。
Java初心者の方は、年齢計算や入社年数の計算をするときに、
自分で年数を計算しようとして複雑なコードを書いてしまうことがあります。
しかし、ChronoUnit.YEARSを使えば、開始日と終了日の差を簡単に取得できます。
特にJavaの最新日時APIは、古いDateクラスやCalendarクラスよりも安全で読みやすく、
Javaプログラミング初心者にもおすすめされています。
ChronoUnit.YEARSは「何年差があるか」を取得するための定数です。
2. betweenメソッドとは?
betweenメソッドは、二つの日付や時間の差を取得するためのメソッドです。
Javaの日付計算では非常によく使われます。
基本構文は次のようになります。
ChronoUnit.YEARS.between(開始日, 終了日);
このコードを実行すると、「開始日から終了日までに何年あるか」を取得できます。
Javaで日付差分を求めたい場合、
betweenメソッドは非常に便利です。
年だけではなく、月、日、時間、分なども取得できます。
よく使う単位
YEARS:年
MONTHS:月
DAYS:日
HOURS:時間
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. 年齢を計算する方法」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
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. マイナスの値になる場合
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以外にも使える単位
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と一緒に使う理由」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
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の日付操作では、
LocalDateとChronoUnitをセットで覚えると非常に便利です。
8. ChronoUnit.YEARSを使うときの注意点
JavaでChronoUnit.YEARSを使うときには、
いくつか注意点があります。
一つ目は、「完全な年数」が返されることです。
例えば、二つの日付の差が九年十一か月だった場合、 結果は九になります。
二つ目は、開始日と終了日の順番です。 順番が逆になるとマイナス値が返されます。
三つ目は、日時ではなく「日付」で計算するケースが多いことです。
時間単位まで必要ない場合は、
LocalDateを使う方がシンプルでわかりやすくなります。
betweenメソッドは「完全な年数」を返します。
端数は自動的に切り捨てられます。
Javaの日時計算は難しく感じやすいですが、
ChronoUnit.YEARSとbetweenメソッドを使えば、
シンプルかつ安全に実装できます。
年齢計算、勤続年数計算、契約期間計算など、 実務でも利用頻度が高いので、ぜひ覚えておきましょう。
まとめ
今回は、Javaの日時APIであるChronoUnit.YEARSと
betweenメソッドの使い方について詳しく学びました。
Java初心者の方にとって、日付や時間の計算は難しく感じやすい部分ですが、
Javaのjava.timeパッケージを利用することで、
安全かつ正確に年数計算を行うことができます。
特に、Javaで年齢計算を行いたい場合や、
入社年数、契約期間、利用期間などを求めたい場合には、
ChronoUnit.YEARS.betweenが非常に便利です。
開始日と終了日を指定するだけで、
年単位の差分を簡単に取得できるため、
複雑な計算式を書く必要がありません。
Javaの古い日時クラスであるDateやCalendarは、
記述が複雑になりやすく、
初心者には扱いづらい場面がありました。
しかし、現在のJavaでは、
LocalDateやChronoUnitを利用する方法が推奨されています。
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のLocalDate、
LocalDateTime、
ChronoUnitなどを理解しておくことは、
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は非常に強力なので、 使いこなせるようになると開発効率が大きく向上します。」