お知らせ
2015年2月6日
こんなの作ってみた【共通処理:日付計算】
日付の加算式をプログラムで作成しようとすると、意外とめんどくさいと思われたことはないでしょうか。
と、いうわけで処理を作成してみました。
■サンプルプログラム
/* * 指定日から加算後の日付を取得する * @param strDate 指定日(yyyy/MM/dd または YYYYMMDD) * @param num 加算する数値 * @param calType 加算対象 * @return 加算後の日付(yyyy/MM/dd) */ public static String getAddDate(String strDate, int num, int calType) { String changeStrDate = strDate; // 入力情報が存在しない場合、 if (StringUtils.isEmpty(strDate)) { return null; } // 日付の文字列をDateTime型に変換 DateTime dtime = changeDateTime(changeStrDate); // 形式チェック if (dtime == null) { return null; } switch (calType) { case 0: // 年単位に加算 dtime = dtime.plusYears(num); break; case 1: // 月単位に加算 dtime = dtime.plusMonths(num); break; case 2: // 週単位に加算 num *= 7; case 3: // 日単位に加算 dtime = dtime.plusDays(num); break; default: throw new IllegalArgumentException("第2引数が不正です。"); } SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); // YYYY/MM/DD形式にフォーマットした値を返却 return format.format(dtime.getDate()); } /** * 文字列からIntraMartの日付型(DateTime)に変換 * * @param strDate 文字型日付 * @return DateTime IM標準の日付型 */ public static DateTime changeDateTime(String strDate) { DateTime dateTime = null; // フォーマット生成 SimpleDateFormat sdf; // 変換用の変数を生成 String changeStrDate = strDate; if (changeStrDate.indexOf("-") != -1) { // 日付"-"区切りの時間":"区切りの場合 changeStrDate = changeStrDate.replaceAll("-", ""); changeStrDate = changeStrDate.replaceAll(":", ""); } else if (changeStrDate.indexOf("/") != -1) { // 日付"/"区切りの時間":"区切りの場合 changeStrDate = changeStrDate.replaceAll("/", ""); changeStrDate = changeStrDate.replaceAll(":", ""); } changeStrDate = changeStrDate.replaceAll(" ", ""); try { if (changeStrDate.length() == 8) { // 時間がない場合の型変換 sdf = new SimpleDateFormat("yyyyMMdd"); } else { // 時間有の場合の型変換 sdf = new SimpleDateFormat("yyyyMMddHHmmss"); } Date date = sdf.parse(changeStrDate); // Dateからカレンダー型に変換 Calendar clDate = Calendar.getInstance(); clDate.setTime(date); // IntraMartの日付形式に変換 dateTime = new DateTime(SystemTimeZone.getDefaultTimeZone(), clDate.get(Calendar.YEAR), clDate.get(Calendar.MONTH), clDate.get(Calendar.DATE), clDate.get(Calendar.HOUR_OF_DAY), clDate.get(Calendar.MINUTE), clDate.get(Calendar.SECOND)); } catch (Exception e) { e.printStackTrace(); } return dateTime; }
そのまま使うも、流用するよし。
プログラミングの参考になれば幸いです。