Javaで日付の文字列からその前日、翌日の文字列を取得する方法

こんにちは、さるまりんです。

Javaの日付計算についてです。

文字列で日付を渡されたとします。例えば今日だったら"20250120"です。

これの前日、翌日を同じフォーマットの文字列で取得したい。
そんな時はこのようにします。

// 日付の文字列からDateのオブジェクトに
String strDate = "20250120";
DateFormat df = new SimpleDateFormat("yyyyMMdd");

Date dt = df.parse(strDate);

// Calendarのオブジェクトにする
Calendar c = Calendar.getInstance();
c.setTime(dt);

// 日付の操作
c.add(Calendar.DATE, 1); // 翌日に

// 再度、Dateオブジェクトに
Date nextDt = c.getTime();

// Dateオブジェクトから書式指定された文字列を取得
String strNextDate = df.format(nextDate);

コード内のコメントにもありますが処理の流れです。

  1. 日付の文字列からDateクラスのオブジェクトに変換
  2. DateクラスのオブジェクトからCalendarのオブジェクトを取得
  3. Calendarのオブジェクトのadd()メソッドを使って日付を操作
  4. 操作されたCalendarのオブジェクトからDateオブジェクトを取得
  5. Dateオブジェクトから文字列を取得

これでstrNextDateには"20250121"が設定されています。

上の例は翌日でしたが、前日にするには同じメソッドを使って-1を足します。

c.add(Calendar.DATE, -1); // 前日に

Apache CommonsのDateUtils.addDays(Date date, int amount)メソッドを使うとCalendarを使わなくてもシンプルにすることもできます。

// 日付の文字列からDateのオブジェクトに
String strDate = "20250120";
DateFormat df = new SimpleDateFormat("yyyyMMdd");

Date dt = df.parse(strDate);

// dtに1日足します (翌日に)
Date nextDt = DateUtils.addDays(dt, 1);

// Dateオブジェクトから書式指定された文字列を取得
String strNextDate = df.format(nextDate);

前日なら

// 日付の文字列からDateのオブジェクトに
String strDate = "20250120";
DateFormat df = new SimpleDateFormat("yyyyMMdd");

Date dt = df.parse(strDate);

// dtに-1日足します (前日に)
Date prevDt = DateUtils.addDays(dt, -1);

// Dateオブジェクトから書式指定された文字列を取得
String strPrevDate = df.format(prevDate);

です。

いずれも4行が1行になりました。

DateやCalendarは使いにくいという話がずっとあったのでJavaは進化して別のものを使うようになってきています。
新しいJavaプログラミングについても積極的に学んでいきたいと思います。

読んでくださってありがとうございました。
それではまた!