日付文字列(YYYYMMDD)に指定した日数を加算した日付文字列を返す共通関数サンプルです。
サンプルメソッド
例)日付文字列(YYYYMMDD)に指定した日数を加算する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 日付文字列(YYYYMMDD)に指定した日数を加算する * @param ymd 対象日付文字列(YYYYMMDD) * @param d 加算日数 * @return 日付文字列 */ public static String addDate(String ymd, int d){ try{ //日付文字列⇒Date型 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); sdf.setLenient(false); Date dt = sdf.parse(ymd); //日付加算 Calendar cal = Calendar.getInstance(); cal.setTime(dt); cal.add(Calendar.DATE, d); //日付文字列として返す return sdf.format(cal.getTime()); }catch(Exception ex){ return null; } } |
- (実行例)
- addDate("20180401", 10) ⇒"20180411" addDate("20180401", -10) ⇒"20180322" addDate("20180499", 10) ⇒null addDate(null, 10) ⇒null
メモ
- 指定した日付文字列が不正な場合は、nullを返します。
- マイナス値を指定すると、指定した日数を減算します。
String型で入力した日付に1日加算して出力するのに、String型→Date型→Calendar型→加算→Date型→String型と型変換する方法を試行錯誤していたのですが、エラーの応酬でのたうち回っておりました。非static関数を…とか、date型をCalendar型で参照…とか。あちこちのサイトを探し回り、このサイトに辿り着いて、まさに自分の欲しいロジックを得られました。本当に助かりました。コードを解読すると確かにその通りなのですが、なかなかここまで頭が回りません。素晴らしいコードをあげて頂き。誠にありがとうございます。