こんにちは、さるまりんです。
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プログラミングについても積極的に学んでいきたいと思います。
読んでくださってありがとうございました。
それではまた!