こんなの作ってみた【共通処理:日付計算】 | 株式会社アースリンク

2015年2月6日

こんなの作ってみた【共通処理:日付計算】

clock

日付の加算式をプログラムで作成しようとすると、意外とめんどくさいと思われたことはないでしょうか。

と、いうわけで処理を作成してみました。

 

 

■サンプルプログラム

/*
 * 指定日から加算後の日付を取得する
 * @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;
}

 

 

そのまま使うも、流用するよし。
プログラミングの参考になれば幸いです。

Contact
お問い合わせ

電話番号0120 - 889 - 236

受付時間:平日 9:00-18:00