複数のString型からDate型への変換


String型からDate型の変換は、基本は次のように出来ることはわかります

[code]

    String dateStr = "20140101 00:00:00";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
    Date formatDate = sdf.parse(dateStr);
    
[/code]

これは、Date型に変えたい文字列の型が１つに定まっているからできる事だと思います。  
取得するStringの日付形式が複数ある場合にはどのように処理するのでしょうか？

これが数種類であると確定しているなら、その種類に併せて分岐させればよいと思います。  
が、複数ある場合に日付フォーマットとして一般的なものであれば、放り込めばDate型に変換してくれる関数のようなものはないのでしょうか？

例えば以下のような日付をString型で取得します。

[code]

    2016-01-08T15:35:42Z
    2016-01-03T13:18:06.483+09:00
    Sat, 31 Oct 2015 13:33:51 +0000
    
[/code]




org.apache.commons.lang3.time.DateUtilsのparseDate()メソッドで可能です。

[code]

    final String[] PATTERN = {"yyyy-MM-dd'T'HH:mm:ss'Z'",
                        "yyyy-MM-dd'T'HH:mm:SSSZ",
                        "EEE, dd MMM yyyy HH:mm:ss Z"};
    String data1 = "2016-01-08T15:35:42Z";
    String data2 = "2016-01-03T13:18:06.483+09:00";
    String data3 = "Sat, 31 Oct 2015 13:33:51 +0000";
    
    System.out.println(DateUtils.parseDate(date1, PATTERN));
    System.out.println(DateUtils.parseDate(date2, PATTERN));
    System.out.println(DateUtils.parseDate(date3, PATTERN));
    
[/code]

Date関連のライブラリなんか使えばほかにも方法があると思いますが、  
おそらく一番使われているのではないでしょうか。  
ちなみに、英語の月名の変換は、それぞれのUtilityで変換できるもの、できないものがあるのに注意してください。




org.apache.commons.lang3.time.DateUtilsのparseDate()メソッドで可能です。

[code]

    final String[] PATTERN = {"yyyy-MM-dd'T'HH:mm:ss'Z'",
                        "yyyy-MM-dd'T'HH:mm:SSSZ",
                        "EEE, dd MMM yyyy HH:mm:ss Z"};
    String data1 = "2016-01-08T15:35:42Z";
    String data2 = "2016-01-03T13:18:06.483+09:00";
    String data3 = "Sat, 31 Oct 2015 13:33:51 +0000";
    
    System.out.println(DateUtils.parseDate(date1, PATTERN));
    System.out.println(DateUtils.parseDate(date2, PATTERN));
    System.out.println(DateUtils.parseDate(date3, PATTERN));
    
[/code]

Date関連のライブラリなんか使えばほかにも方法があると思いますが、  
おそらく一番使われているのではないでしょうか。  
ちなみに、英語の月名の変換は、それぞれのUtilityで変換できるもの、できないものがあるのに注意してください。

