プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

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型に変換