JavaのLocalDate.minusMonthsの使い方を完全ガイド!初心者向け日付操作の基本
生徒
「Javaで日付を扱いたいんですが、数か月前の日付を計算するにはどうしたらいいですか?」
先生
「それならjava.timeパッケージのLocalDateクラスを使うのが便利です。minusMonthsメソッドを使えば、簡単に過去の月へ移動できますよ。」
生徒
「そうなんですね!でも、どうやって使えばいいかピンとこなくて……」
先生
「それではminusMonthsメソッドの使い方を一緒に見ていきましょう!」
1. java.timeパッケージとは?
「1. java.timeパッケージとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
Javaのjava.timeパッケージは、日付と時刻を扱うための新しいAPIを提供するもので、Java 8以降から導入されました。従来のjava.util.DateやCalendarに比べて使いやすく、安全で、より直感的に日付操作ができるのが特徴です。
このパッケージの中には、LocalDate、LocalTime、LocalDateTimeなど、用途に応じたクラスが揃っており、それぞれ時間や日付の操作が簡単に行えます。
2. LocalDateクラスの基本
LocalDateクラスは、日付(年・月・日)のみを扱うクラスです。時刻やタイムゾーンの情報は含まれておらず、純粋に日付操作に特化しています。
例えば、今日の日付を取得したいときは以下のように記述します。
import java.time.LocalDate;
public class DateExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println("今日の日付: " + today);
}
}
3. minusMonthsメソッドとは?
minusMonthsメソッドは、指定した月数だけ過去にさかのぼったLocalDateインスタンスを返すメソッドです。
元の日付オブジェクトは変更されず、新しい日付オブジェクトが返ってくるのが特徴です。例えば「3か月前の日付を取得したい」ときに使えます。
4. LocalDate.minusMonthsの使い方(基本編)
「4. LocalDate.minusMonthsの使い方(基本編)」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
ここでは実際にminusMonthsを使って、3か月前の日付を求めてみましょう。
import java.time.LocalDate;
public class MinusMonthsExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate threeMonthsAgo = today.minusMonths(3);
System.out.println("今日の日付: " + today);
System.out.println("3か月前の日付: " + threeMonthsAgo);
}
}
今日の日付: 2025-09-04
3か月前の日付: 2025-06-04
このように、現在日付から指定した月数を引くことで、簡単に過去の日付が取得できます。
5. minusMonthsで年をまたぐケースも自動対応
minusMonthsは、月を引いた結果が前年になる場合も自動で処理してくれます。たとえば、1月から2か月前を求めると、前年の11月になります。
import java.time.LocalDate;
public class CrossYearExample {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2025, 1, 15);
LocalDate result = date.minusMonths(2);
System.out.println("元の日付: " + date);
System.out.println("2か月前の日付: " + result);
}
}
元の日付: 2025-01-15
2か月前の日付: 2024-11-15
このように、minusMonthsメソッドはうるう年や月末の日付を自動で調整してくれるため、初心者でも安心して使うことができます。
6. マイナスの値やゼロを指定した場合
minusMonthsメソッドには、マイナスの値や0を指定することも可能です。
- 0:現在と同じ日付が返る
- マイナス値:未来の日付が返る(
plusMonthsと同様の効果)
import java.time.LocalDate;
public class NegativeMonthsExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println("今日: " + today);
System.out.println("0か月前: " + today.minusMonths(0));
System.out.println("-2か月前: " + today.minusMonths(-2));
}
}
今日: 2025-09-04
0か月前: 2025-09-04
-2か月前: 2025-11-04
誤ってマイナスの値を使ってもエラーにはなりませんが、意味が逆転する点に注意しましょう。
7. minusMonthsを活用した実用例
「7. minusMonthsを活用した実用例」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
現実のプログラムでは、以下のような用途でminusMonthsを使うことがよくあります。
- 契約日から数か月前の更新日を自動算出
- ブログやニュースサイトで「○か月前の記事」を抽出
- 売上管理システムで過去数か月のデータを集計
たとえば「1年前の同じ月」などを比較する処理にも簡単に使えるため、日付計算が必要な場面では欠かせないメソッドです。
8. LocalDateとminusMonthsの組み合わせで安全な日付処理を
LocalDateとminusMonthsの組み合わせは、日付操作におけるバグの発生を防ぐためのベストプラクティスの一つです。java.timeパッケージは不変オブジェクトで構成されているため、スレッドセーフであり、複数人で開発している現場でも安心して使うことができます。
これからJavaで日付を扱う場合は、古いDateクラスではなく、ぜひこのLocalDateとminusMonthsを活用してみてください。