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とは逆に、差を求めたいときにはこの方法も覚えておくと便利です。
まとめ
今回はJavaのLocalDateクラスに用意されているminusDaysメソッドについて、基本的な使い方から応用的な活用方法まで詳しく解説してきました。 Java初心者にとって日付操作は難しく感じることが多い分野ですが、java.timeパッケージを正しく理解することで、安全で分かりやすいコードを書くことができるようになります。 特にLocalDateは日付だけを扱うシンプルなクラスであり、時間の影響を受けずに扱えるため、業務システムやWebアプリケーションでも非常に多く利用されています。
minusDaysメソッドは指定した日数だけ過去の日付を取得するための機能であり、昨日や数日前の日付を求めるときに非常に便利です。 例えばログの分析や売上データの集計、ユーザーの最終ログイン日からの経過日数の計算など、実務でも頻繁に登場する処理です。 このような処理を簡潔に記述できる点が、LocalDateの大きなメリットといえるでしょう。
またLocalDateがイミュータブルであるという点も重要なポイントです。 minusDaysを実行しても元のオブジェクトは変更されず、新しい日付オブジェクトが返されます。 この性質によって、予期しないバグを防ぎながら安全に日付操作を行うことができます。 初心者のうちはこの動きをしっかり理解しておくことで、後々のトラブルを回避できるようになります。
さらにminusDaysはループ処理と組み合わせることで、過去数日分のデータを一括で取得することも可能です。 例えば直近一週間のデータを表示する処理や、履歴情報を順番に取得する処理など、応用範囲は非常に広いです。 日付を一つずつ手動で計算する必要がなくなるため、コードの可読性と保守性が大きく向上します。
DateTimeFormatterと組み合わせることで、日付を分かりやすい形式で表示することもできます。 そのままの形式では見づらい場合でも、フォーマットを変更することでユーザーにとって読みやすい表示にすることが可能です。 こうした連携を理解しておくことで、より実践的なアプリケーション開発ができるようになります。
一方で注意点として、minusDaysは単純な日数の減算を行うだけであり、営業日や祝日といった特殊な条件には対応していません。 そのため業務要件によっては追加のロジックを実装する必要があります。 このような制限を理解したうえで使うことが、正しい設計につながります。
Javaの基礎を学ぶうえで、LocalDateとminusDaysの理解は非常に重要です。 日付操作は多くのシステムで必ず登場するため、今回学んだ内容を繰り返し実践し、自分のコードの中で活用していきましょう。 これにより、Javaプログラミングの基礎力が確実に向上していきます。
import java.time.LocalDate;
public class SummaryExample1 {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate threeDaysAgo = today.minusDays(3);
System.out.println(threeDaysAgo);
}
}
2025-09-01
このようにminusDaysを使えば、簡単に過去の日付を取得することができます。
import java.time.LocalDate;
public class SummaryExample2 {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
for (int i = 1; i <= 5; i++) {
System.out.println(today.minusDays(i));
}
}
}
2025-09-03
2025-09-02
2025-09-01
2025-08-31
2025-08-30
ループと組み合わせることで、複数の日付をまとめて扱えるようになります。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SummaryExample3 {
public static void main(String[] args) {
LocalDate date = LocalDate.now().minusDays(2);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
System.out.println(date.format(formatter));
}
}
2025/09/02
表示形式を整えることで、ユーザーにとって見やすい日付表示を実現できます。
生徒
「LocalDateのminusDaysって、すごく便利ですね」
先生
「そうですね。日付を過去に戻す処理はとてもよく使われます」
生徒
「しかも元の値が変わらないのが安心ですね」
先生
「イミュータブルな設計は安全なプログラムにとって重要です」
生徒
「ループで複数の日付を出す方法も理解できました」
先生
「実務でもよく使うので、ぜひ覚えておきましょう」
生徒
「日付フォーマットと一緒に使うのも便利ですね」
先生
「その通りです。組み合わせて使うことで、より実践的なコードになります」
ChatGPTなどの生成AIをこれから学びたい方に向けて、AIスキルアカデミーの口コミ・評判、料金、無料セミナーの内容を詳しくまとめています。
AIスキルアカデミーの口コミ・評判を詳しく見る