お知らせ
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;
}
そのまま使うも、流用するよし。
プログラミングの参考になれば幸いです。