JavaのLocalDateTimeクラスとminusメソッドを完全ガイド!初心者でもわかる日時操作
生徒
「Javaで日時から日数や時間を引き算する方法ってありますか?」
先生
「はい、java.timeパッケージのLocalDateTimeクラスには、minusメソッドが用意されています。これを使えば日付や時刻を簡単に減算できますよ。」
生徒
「例えば一週間前の日時や三時間前の時刻を求めたいときに使えるんですね!」
先生
「その通りです。では、minusメソッドの基本から応用まで見ていきましょう。」
1. java.timeパッケージとは?
Javaのjava.timeパッケージは、日時や時間を直感的に扱えるようにするためのライブラリです。Java8から導入され、古いDateやCalendarの使いにくさを解消しました。初心者が「Java 日時 計算」や「Java LocalDateTime minus 使い方」といった検索をすると、このパッケージに関する情報が多く見つかるでしょう。
2. LocalDateTimeクラスとは?
LocalDateTimeクラスは年月日と時刻をまとめて扱える便利なクラスです。タイムゾーンを含まないためシンプルに利用でき、ログの記録、スケジュール管理、予約システムなど多くの場面で使われています。
3. minusメソッドとは?
minusメソッドは日時から指定した単位の時間を引き算するために使います。例えば「10日引く」「2時間引く」といった処理を簡単に書けます。これにより、過去の日時を計算するプログラムが直感的に実装できます。
4. minusメソッドの基本的な使い方
次の例では、現在の日時から日数や時間を引いて計算しています。
import java.time.LocalDateTime;
public class MinusExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime fiveDaysAgo = now.minusDays(5);
LocalDateTime threeHoursAgo = now.minusHours(3);
System.out.println("現在日時: " + now);
System.out.println("5日前: " + fiveDaysAgo);
System.out.println("3時間前: " + threeHoursAgo);
}
}
実行すると次のような結果になります。
現在日時: 2025-09-23T15:30:00
5日前: 2025-09-18T15:30:00
3時間前: 2025-09-23T12:30:00
5. minusとChronoUnitの組み合わせ
minusメソッドはChronoUnitを使って柔軟に時間単位を指定できます。これによりコードが読みやすくなり、月単位や週単位の引き算も簡単です。
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
public class MinusWithChronoUnit {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime oneWeekAgo = now.minus(1, ChronoUnit.WEEKS);
LocalDateTime tenMinutesAgo = now.minus(10, ChronoUnit.MINUTES);
System.out.println("1週間前: " + oneWeekAgo);
System.out.println("10分前: " + tenMinutesAgo);
}
}
6. 実務での活用例
minusメソッドは、例えば「有効期限が7日前に切れているか確認」「三十分前のログを取得」といった処理に便利です。予約管理や勤怠システムなど、時間の経過を扱うアプリケーションで必須の知識となります。
7. minusとplusの違い
minusが時間を減算するのに対し、plusは加算するメソッドです。両方を組み合わせることで、柔軟に日時を計算できます。初心者はまず「minusで過去、plusで未来」と覚えると理解しやすいです。
8. 補足知識
java.timeパッケージにはLocalDateやLocalTimeなどもあり、それぞれにminusが用意されています。日付だけ扱いたいときや時間だけ扱いたいときはこれらのクラスを使うとよりシンプルに実装できます。さらに、タイムゾーンを考慮したい場合はZonedDateTimeとminusを組み合わせると国際化対応のシステムも簡単に構築できます。