Java 自作の日付変換メソッド
— 目次 —
1.概要
2.ソースコード
3.解説
1.概要
下記処理を行ってパラメーターと同じString型を返すメソッド
但し、不正な日付の場合はNULLを返す
①半角に変換
②日付フォーマット(YYYY/MM/DD)チェック
③存在する日付かどうかをチェック
④日付変換(例 2019/1/1⇒2019/01/01)
2.ソースコード
import java.text.Normalizer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
/**
*日付に関する変換やバリデーションチェックを行うクラス
*/
public class MyDateFormat {
/**
* 下記処理を行ってパラメーターと同じString型を返すメソッド
* 但し、不正な日付の場合はNULLを返す
*
* ①半角に変換
* ②日付フォーマット(YYYY/MM/DD)チェック
* ③存在する日付かどうかをチェック
* ④日付変換(例 2019/1/1⇒2019/01/01)
*
* @param str
*/
public String checkSlach(String str) {
String result = null;
//日付フォーマット「YYYY/MM/DD」
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
//存在しない日付の場合はエラーにする設定
sdf.setLenient(false);
//タイムゾーンを日本時刻に変換
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
try {
//半角に変換
String lowerStr = Normalizer.normalize(str, Normalizer.Form.NFKC);
//存在する日付かをチェック ※戻り値はDate型
Date checkDate = sdf.parse(lowerStr);
//日本時刻でresultにセット
result = sdf.format(checkDate);
} catch(Exception e) {
e.printStackTrace();
return null;
}
return result;
}
3.解説
①「setLenient()」メソッドに引数「false」を付与して存在しない日付の場合にエラーにする
②「setTimeZone()」メソッドに引数「TimeZone.getTimeZone("Asia/Tokyo")」付与して日本時刻に変換
③「Normalizer.normalize()」メソッドの第2引数に「Normalizer.Form.NFKC」を付与して半角に変換
④「parse()」メソッドでDate型に変換