日付文字列をいじらずにJavaでさまざまなタイプの日付を解析する簡単な方法はありますか?
6 種類の日付を処理する必要があります。
- 2013 年 5 月 16 日 19:27:12 CEST
- 2013 年 5 月 14 日 (火) 13:15:00 +0200
- 2013-05-20T12:01:57Z
- 2012/11/13 15:30:00
- 2013.11.11
- 1970-01-01T00:00:00.000Z
日付がサーバーからどちらの形式で届くかはわかりません...
ありがとう!
すべてのフォーマットを反復して解析を試み、例外を無視できます。適合する形式がない場合は、例外をスローします。
このような異なる日付形式を処理する実際の「簡単な」方法はないと思います。「標準の日付形式」をサーバーに釘付けにするオプションがあれば、それが簡単な方法です。
一般的なアプローチは、対処しなければならないすべての「奇妙な」日付形式に対して DateParser を構築することです。Joda Time を使用した最初のデートの例を次に示します。
String date1 = "16 May 2013 19:27:12 CEST";
DateTimeFormatter fmt = new DateTimeFormatterBuilder()
.appendDayOfMonth(2)
.appendLiteral(' ')
.appendMonthOfYearShortText()
.appendLiteral(' ')
.appendYear(4, 4)
.appendLiteral(' ')
.appendHourOfDay(2)
.appendLiteral(":")
.appendMinuteOfDay(2)
.appendLiteral(":")
.appendSecondOfDay(2)
.appendLiteral(' ')
.appendLiteral("CEST")
.toFormatter();
DateTime parseDateTime = fmt.parseDateTime(date1);
System.out.println(parseDateTime);
これが、他のケースで DateParser を構築するのに役立つことを願っています。そして覚えておいてください - 常にUTCに関連して日付を保存してください!
ストックの「Joda-Time を使用する」の回答を詳しく説明するには、Joda-TimeDateTimeParser
で 6 つのフォーマットのそれぞれに対して を作成し、それらを単一の に追加しますDateTimeFormatter
。
この質問に対する受け入れられた回答を参照してください: Using Joda Date & Time API to parse multiple formats
標準 API に代わる最もよく知られているのは Joda-Time です。また、JSR 310 は Java SE 7 の改良された日付/時刻 API です。
サンプル コードは次のとおりです。2001-07-04T12:08:56.235-0700 のような日付文字列の場合、次の形式「yyyy-MM-dd'T'HH:mm:ss.SSSZ」を使用する必要があります。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = simpleDateFormat.parse("2001-07-04T12:08:56.235-0700");
System.out.println(date);
詳細は以下のリンクで入手できます