お知らせ
2015年2月6日
こんなの作ってみた【共通処理:日付計算】
日付の加算式をプログラムで作成しようとすると、意外とめんどくさいと思われたことはないでしょうか。
と、いうわけで処理を作成してみました。
■サンプルプログラム
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | /* * 指定日から加算後の日付を取得する * @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; } |
そのまま使うも、流用するよし。
プログラミングの参考になれば幸いです。