こんにちは、さるまりんです。
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);
コード内のコメントにもありますが処理の流れです。
- 日付の文字列から
Dateクラスのオブジェクトに変換 DateクラスのオブジェクトからCalendarのオブジェクトを取得Calendarのオブジェクトのadd()メソッドを使って日付を操作- 操作された
CalendarのオブジェクトからDateオブジェクトを取得 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プログラミングについても積極的に学んでいきたいと思います。
読んでくださってありがとうございました。
それではまた!