1. ホーム
  2. java

Joda Date & Time API を使って複数のフォーマットをパースする

2023-09-23 17:15:06

質問

Jodaを使って、日付/時刻を含むサードパーティのログファイルを解析しています。日付/時刻は、私が解析しているログファイルの年齢に応じて、2つの異なるフォーマットのうちの1つです。

現在、私はこのようなコードを持っています。

try {
    return DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss").parseDateTime(datePart);
} catch (IllegalArgumentException e) {
    return DateTimeFormat.forPattern("E, MMM dd, yyyy HH:mm").parseDateTime(datePart);
}

これは動作しますが、Effective Java 2nd EditionのJoshua Blochのアドバイス(Item 57: Use exceptions only for exceptional conditions)に反しています。また、ログファイルの日付/時刻が狂っているためにIllegalArgumentExceptionが発生したかどうかを判断するのが難しくなります。

例外を誤用しない、より良いアプローチを提案できますか?

どのように解決するのですか?

複数のパーサを作成し、ビルダーに追加するには DateTimeFormatterBuilder.append メソッドで追加できます。

DateTimeParser[] parsers = { 
        DateTimeFormat.forPattern( "yyyy-MM-dd HH" ).getParser(),
        DateTimeFormat.forPattern( "yyyy-MM-dd" ).getParser() };
DateTimeFormatter formatter = new DateTimeFormatterBuilder().append( null, parsers ).toFormatter();

DateTime date1 = formatter.parseDateTime( "2010-01-01" );
DateTime date2 = formatter.parseDateTime( "2010-01-01 01" );