Javaの日付を加算・減算する方法を徹底解説!初心者向けplusDays・minusMonthsの使い方
生徒
「Javaで1週間後の日付や、1か月前の日付を計算することってできますか?」
先生
「できますよ。plusDaysやminusMonthsなどのメソッドを使えば、簡単に日付の加算・減算ができます。」
生徒
「それならカレンダーアプリとか作れそうですね!どうやって使うのか教えてください!」
先生
「それでは、Javaの日付計算の基本からしっかり学んでいきましょう!」
1. Javaで日付を操作するには?LocalDateの活用法
Javaで日付の計算(加算・減算)を行うには、LocalDateクラスを使うのが基本です。
LocalDateはjava.timeパッケージに含まれており、年・月・日を扱う日付専用のクラスです。
これに対して、時間や分まで扱いたいときはLocalDateTimeを使います。
2. plusDaysで日付を加算する方法(未来の日付を計算)
Javaで数日後の日付を取得したいときはplusDaysメソッドを使います。
たとえば「今日から7日後」を計算したい場合は以下のように書きます。
import java.time.LocalDate;
public class PlusDaysExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate nextWeek = today.plusDays(7);
System.out.println("今日の日付: " + today);
System.out.println("7日後の日付: " + nextWeek);
}
}
今日の日付: 2025-09-03
7日後の日付: 2025-09-10
このようにplusDays(7)で「7日後」を取得できます。
引数に入れる数字を変えれば、好きな日数を加算できます。
3. minusMonthsで過去の日付を計算する方法
過去の日付を取得したいときにはminus系のメソッドを使います。
たとえば「1か月前」の日付を求めたいときはminusMonthsを使います。
import java.time.LocalDate;
public class MinusMonthsExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate lastMonth = today.minusMonths(1);
System.out.println("今日の日付: " + today);
System.out.println("1か月前の日付: " + lastMonth);
}
}
今日の日付: 2025-09-03
1か月前の日付: 2025-08-03
minusMonths(1)のように指定すると、1か月分減算されます。
マイナスの方向に進む計算も簡単にできるのがJavaの日付APIの強みです。
4. 他にも使える!plusWeeks・plusYears・minusDaysなど
plusDaysやminusMonths以外にも、Javaではさまざまな単位で日付計算が可能です。
代表的なメソッドを以下にまとめます。
plusWeeks(n):n週間後の日付を取得plusMonths(n):nか月後の日付を取得plusYears(n):n年後の日付を取得minusDays(n):n日前の日付を取得minusWeeks(n):n週間前の日付を取得minusYears(n):n年前の日付を取得
すべてのメソッドはLocalDateやLocalDateTimeでも同じように使えます。
5. LocalDateTimeで日時の加算・減算を行う方法
LocalDateTimeを使えば、日付と時刻を一緒に扱って加算・減算が可能です。
たとえば「3時間後」「15分前」などの時間操作もplusHoursやminusMinutesを使って行えます。
import java.time.LocalDateTime;
public class DateTimeCalcExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime after3Hours = now.plusHours(3);
LocalDateTime before15Minutes = now.minusMinutes(15);
System.out.println("現在時刻: " + now);
System.out.println("3時間後: " + after3Hours);
System.out.println("15分前: " + before15Minutes);
}
}
現在時刻: 2025-09-03T15:00
3時間後: 2025-09-03T18:00
15分前: 2025-09-03T14:45
LocalDateTimeを使えば、より細かい単位の時間も直感的に操作できます。
6. DateTimeFormatterと組み合わせて見やすく表示する
計算した日付や時刻は、DateTimeFormatterを使うことで見やすい形式に整えることができます。
たとえば、次のように「yyyy年MM月dd日 HH時mm分」形式で出力可能です。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class FormatAfterCalc {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime future = now.plusDays(5).plusHours(2);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH時mm分");
String formatted = future.format(formatter);
System.out.println("5日後の2時間後: " + formatted);
}
}
5日後の2時間後: 2025年09月08日 17時00分
フォーマットを使うことで、ユーザーにとって読みやすく、直感的に理解できる出力になります。
7. 日付の加算・減算時の注意点(月末・うるう年など)
Javaの日付加算・減算は非常に便利ですが、以下のようなケースでは注意が必要です。
- 2月29日 → 翌年に
plusYears(1)すると、2月28日になる - 1月31日 →
plusMonths(1)で2月28日または29日になる(自動調整) - 31日 → 月によって存在しない場合、最後の日に調整される
Javaのjava.timeパッケージはこうした不整合を自動的に補正してくれますが、意図と違う日付になる可能性もあるので、テストは必ず行いましょう。
まとめ
Javaの日付加算減算の基本理解を整理する
Javaの日付計算はLocalDateやLocalDateTimeを中心に考えることで、非常にシンプルかつ安全に実装できます。特にplusDaysやminusMonthsといったメソッドは、日付の加算や減算を直感的に行えるため、初心者から実務レベルまで幅広く利用されています。従来のDateクラスやCalendarクラスと比較して、コードの可読性や保守性が大幅に向上している点も重要なポイントです。
日付計算において重要なのは、現在の日付を基準として未来や過去の日付を正確に求めることです。例えばスケジュール管理や予約システム、ログ分析など、多くのシステムで日付の加算減算処理が必要になります。そのためLocalDateを使った日付操作を理解することは、Java開発において非常に重要なスキルとなります。
plus系メソッドとminus系メソッドの使い分け
Javaの日付計算では、未来の日付を求める場合はplus系メソッド、過去の日付を求める場合はminus系メソッドを使用します。plusDaysやplusWeeksを使えば数日後や数週間後を簡単に取得でき、minusMonthsやminusYearsを使えば過去のデータを取得することができます。このようにメソッド名から処理内容が直感的に分かる設計になっているため、コードの可読性が高くなります。
また、これらのメソッドは元のオブジェクトを変更するのではなく、新しい日付オブジェクトを返す点にも注意が必要です。この不変性の仕組みにより、安全なプログラムが実現されています。日付を扱う際には、変数に再代入して使うことを意識すると良いでしょう。
日時操作にはLocalDateTimeを活用する
日付だけでなく時間も扱いたい場合はLocalDateTimeを使用します。plusHoursやminusMinutesなどを組み合わせることで、より細かい時間計算が可能になります。例えば予約システムでは開始時間や終了時間の計算が必要になるため、LocalDateTimeの理解は必須です。
日付と時刻を同時に扱うことで、より現実的なシステム設計が可能になります。特にログ処理やバッチ処理などでは、時間単位での計算が求められるため、LocalDateTimeの活用場面は非常に多くなります。
フォーマット処理でユーザーフレンドリーな表示を実現
DateTimeFormatterを使うことで、計算した日付を分かりやすい形式で表示できます。例えば日本語形式で表示することで、ユーザーにとって理解しやすい画面を作ることができます。システム開発では、内部処理だけでなく表示形式も重要な要素となります。
フォーマットを適切に設定することで、ログや画面表示の品質が向上します。特に業務システムでは日付の見やすさがユーザー体験に直結するため、フォーマット処理は必ず押さえておきたいポイントです。
実務でよく使う日付計算のサンプルコード
import java.time.LocalDate;
import java.time.LocalDateTime;
public class DateSummaryExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate after10Days = today.plusDays(10);
LocalDate before2Months = today.minusMonths(2);
System.out.println("今日: " + today);
System.out.println("10日後: " + after10Days);
System.out.println("2か月前: " + before2Months);
LocalDateTime now = LocalDateTime.now();
LocalDateTime after5Hours = now.plusHours(5);
System.out.println("現在時刻: " + now);
System.out.println("5時間後: " + after5Hours);
}
}
今日: 2025-09-03
10日後: 2025-09-13
2か月前: 2025-07-03
現在時刻: 2025-09-03T15:00
5時間後: 2025-09-03T20:00
日付計算の注意点と実務での落とし穴
Javaの日付計算では、月末やうるう年などの特殊なケースに注意が必要です。例えば一月三十一日に一か月を加算すると、二月の最終日に自動的に補正されます。この仕様を理解していないと、意図しない結果になることがあります。
また、システムによっては日付の基準やタイムゾーンの違いが影響することもあります。特にグローバルなサービスでは、タイムゾーンを意識した設計が求められます。こうした点も含めて、日付計算は単純なようで奥が深い分野です。
まとめとして押さえるべき重要ポイント
Javaの日付加算減算はLocalDateとLocalDateTimeを使うことで安全かつ簡単に実装できます。plus系とminus系のメソッドを使い分けることで、未来と過去の計算を直感的に行えます。また、DateTimeFormatterを使うことで見やすい表示も実現できます。
日付操作は業務システムやWebアプリケーションにおいて必須の処理です。基本をしっかり理解し、サンプルコードを繰り返し実行することで、確実にスキルとして身につけることができます。今回学んだ内容をベースに、より複雑な日付処理にも挑戦していきましょう。
生徒
Javaの日付計算は思っていたより簡単でした
先生
LocalDateとLocalDateTimeを理解すれば基本は十分です
生徒
plusDaysとminusMonthsの使い分けも分かりました
先生
未来と過去でメソッドを使い分けるのがポイントです
生徒
月末の計算は少し注意が必要ですね
先生
自動補正される仕組みを理解しておくことが大切です
生徒
実務でもかなり使いそうだと感じました
先生
日付処理はほぼすべてのシステムで必要になる重要な技術です