JavaのLocalDate.minusDaysの使い方を完全ガイド!初心者でもわかる日付操作
生徒
「Javaで昨日の日付を取得する方法ってありますか?」
先生
「Javaではjava.timeパッケージのLocalDateクラスを使えば、簡単に日付操作ができます。昨日を取得したいならminusDaysメソッドが便利ですよ。」
生徒
「minusDaysって何ですか?どう使うんですか?」
先生
「それでは、LocalDate.minusDaysメソッドの使い方をわかりやすく解説していきましょう!」
1. java.timeパッケージとは?
java.timeパッケージは、Java8から導入された新しい日付と時刻のAPIです。旧来のjava.util.Dateやjava.util.Calendarに比べて、使いやすく安全に日付・時刻を扱えるようになりました。
このパッケージには、日付操作に便利なLocalDateや、時刻を扱うLocalTime、日付と時刻の両方を扱うLocalDateTimeなどが含まれています。
日付を扱う場合は、LocalDateが最も基本的でよく使われます。
2. LocalDateクラスとは?
LocalDateクラスは、日付(年・月・日)を表すためのクラスです。時間情報は持っていません。例えば、「2025年9月4日」などの日付だけを管理したい場合に最適です。
LocalDateの主な特徴は以下の通りです:
- イミュータブル(変更不可)で安全に使える
- 現在の日付を簡単に取得できる
- 日付の加算・減算も簡単にできる
そして、日付を減らす処理に使えるのがminusDaysメソッドです。
3. minusDaysメソッドの基本的な使い方
minusDaysメソッドは、指定した日数だけ過去の日付を取得できる便利なメソッドです。
たとえば、「今日から1日前」を取得するには以下のように書きます。
import java.time.LocalDate;
public class MinusDaysExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);
System.out.println("今日の日付:" + today);
System.out.println("昨日の日付:" + yesterday);
}
}
実行結果の例:
今日の日付:2025-09-04
昨日の日付:2025-09-03
4. minusDaysの応用:過去7日間をループで取得
minusDaysメソッドは、繰り返し処理の中でも活用できます。たとえば、過去7日間の日付を1日ずつ取得する場合は、以下のようにします。
import java.time.LocalDate;
public class Last7Days {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
for (int i = 1; i <= 7; i++) {
LocalDate date = today.minusDays(i);
System.out.println(i + "日前:" + date);
}
}
}
このように、minusDaysは日付を自在に操る強力なツールとなります。
5. minusDaysと他のメソッドとの違い
minusDaysと似たようなメソッドにplusDaysがあります。これは日付を未来に進めたいときに使います。
また、日単位以外にも、minusWeeksやminusMonths、minusYearsといったメソッドも用意されています。
用途に応じて使い分けることで、柔軟な日付処理が可能になります。
6. LocalDateと他のAPIとの連携
LocalDateで取得した日付は、データベースに保存したり、文字列として画面に表示したりすることが多いです。
文字列に変換するにはtoStringメソッドを使ったり、DateTimeFormatterを使えば自由な形式に整形できます。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class FormatDate {
public static void main(String[] args) {
LocalDate date = LocalDate.now().minusDays(3);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String formatted = date.format(formatter);
System.out.println("3日前は:" + formatted);
}
}
実行結果の例:
3日前は:2025年09月01日
7. minusDaysを使うときの注意点
minusDaysは、日付の計算に便利ですが、祝日や営業日といった「特定のルールを含んだ日数の計算」には対応していません。
たとえば、「平日のみで3日前」といった処理は、別途ロジックを組む必要があります。
また、LocalDateはイミュータブルなので、minusDaysで得られるのは新しいインスタンスです。元の変数が変わるわけではない点にも注意しましょう。
8. 日付差を求めたいならどうする?
「過去の日付と今日の日付の差を計算したい」といった場合は、ChronoUnit.DAYS.between()などを使います。
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class DateDiffExample {
public static void main(String[] args) {
LocalDate startDate = LocalDate.of(2025, 8, 1);
LocalDate endDate = LocalDate.now();
long days = ChronoUnit.DAYS.between(startDate, endDate);
System.out.println("日付の差:" + days + "日");
}
}
minusDaysとは逆に、差を求めたいときにはこの方法も覚えておくと便利です。