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

投稿者: Anonymous

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

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

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

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

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

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

解決

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

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));

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *