Java 文字列( String )から日付型( Date )に変換する方法 - クラス Date

Javaで文字列(String)から日付型(Date)へ変換する方法です。

実務ではよく利用しますので、しっかり理解しておきましょう。

ここでの Date は、java.util.Date を指します。

簡単に説明すると、Java で 文字列から日付型 Date への変換はSimpleDateFormat を利用します。SimpleDateFormat をインスタンス化した後、setLenient メソッドとparse メソッドを利用することで変換できます。

変換できない文字列が指定されると 例外( ParseException ) が発生しますので注意しましょう。

ここでは Javaで文字列(String)から日付型(Date)へ変換する方法をサンプルソースで解説 します。


サンプルソース

今回のサンプルでは、文字列日付と書式を指定して変換します。変換できない場合には null を返します。

/**
 * 指定されたパターン文字列の文字列を Date オブジェクトにして返します。
 * Date オブジェクトとして有効でない場合は null を返します。
 *
 * @param value 日付を表す文字列
 * @param format 日付を表す文字列のパターン書式 (yyyy/MM/dd など)
 * @return 日付を表す文字列の Date オブジェクト
 */
public static Date toDate(String value, String format) {

    if ( value == null || value == "" )
        return null;

    if ( format == null || format == "" )
        format = "yyyy/MM/dd";

    // 日付フォーマットを作成
    SimpleDateFormat dateFormat = new SimpleDateFormat(format);

    // 日付の厳密チェックを指定
    dateFormat.setLenient(false);

    try {
        // 日付値を返す
        return dateFormat.parse(value);
    } catch ( ParseException e ) {
        // 日付値なしを返す
        return null;
    } finally {
        dateFormat = null;
    }
}

/**
 * 指定されたパターン文字列の文字列を Date オブジェクトにして返します。
 * Date オブジェクトとして有効でない場合は null を返します。
 *
 * @param value 日付を表す文字列
 * @return 日付を表す文字列の Date オブジェクト
 */
public static Date toDate(String value) {
    return toDate(value , "yyyy/MM/dd");
}

toDateメソッドを用意

今回は、DateUtils というクラスを作り、staticメソッドとして用意しています。

内部では、dateFormat.parse を実行していますが、ParseException が発生した場合は、デフォルト値を返すようにしてあります。このようなメソッドを用意しておくことで、ビジネスロジック内に余計な try {} catch {} を書く必要がなく、ソースを美しく保つことができますので、ぜひ活用ください。

それでは、テストを実施してみましょう。

テスト

以下のようなテストソースを用意しました。

System.out.println(DateUtils.toDate("", ""));
System.out.println(DateUtils.toDate(null, null));
System.out.println(DateUtils.toDate("2013/12/17", "yyyy/MM/dd"));
System.out.println(DateUtils.toDate("2013/12", "yyyy/MM/dd"));
System.out.println(DateUtils.toDate("20131217", "yyyy/MM/dd"));
System.out.println(DateUtils.toDate("20131217", "yyyyMMdd"));
System.out.println(DateUtils.toDate("XYZ", "yyyy/MM/dd"));
System.out.println(DateUtils.toDate("2013/12/17"));
  • 1 行目:日付文字列・日付書式共に空文字列ですので null が返ります。
  • 2 行目:日付文字列・日付書式共に null ですので null が返ります。
  • 3 行目:日付文字列・日付書式共に正常な値ですので、日付型が返ります。
  • 4 行目:日付文字列が正常でないので null が返ります。
  • 5 行目:日付文字列に対して、日付書式が正常でないので null が返ります。
  • 6 行目:日付文字列・日付書式共に正常な値ですので、日付型が返ります。
  • 7 行目:日付文字列が正常でないので null が返ります。
  • 8 行目:日付文字列が正常なので 日付型 が返ります。

結果を確認する

結果は、以下の通りです。

null
null
Tue Dec 17 00:00:00 JST 2013
null
null
Tue Dec 17 00:00:00 JST 2013
null
Tue Dec 17 00:00:00 JST 2013

まとめ

Javaで文字列(String)から日付型(Date)へ変換する方法をサンプルソースで解説しました。

日付の変換についてご理解いただけましたか。この辺りは実務では常に求められるので、しっかり覚えておきたいですね。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。