2012-05-25 10 views
5

私はSolrにインデックスを付ける前に、以下のフォーマットで日付を渡すことができます。渡される日付の例は次のとおりです Solr用のJavaで一般的な日付フォーマッタを作成するには?

String dateStr = "2012-05-23T00:00:00-0400"; 
String dateStr1 = "May 24, 2012 04:57:40 GMT"; 
String dateStr2 = "2011-06-21"; 
標準Solrフォーマットは "yyyy-MM-dd'T'HH:mm:ss'Z '"です。

私はSimpleDateFormatを試しましたが、さまざまな形式をサポートする汎用プログラムを書くことはできません。それは、例外の解析を終了します。

また、私はジョーダの時間を試しましたが、これまでUTC変換で成功していませんでした。

public static String toUtcDate(final String iso8601) { 
     DateTime dt = ISO_PARSE_FORMAT.parseDateTime(iso8601); 
     DateTime utcDt = dt.withZone(ZONE_UTC); 
     return utcDt.toString(ISO_PRINT_FORMAT); 
    }

これを達成するための標準ライブラリはありますか?

何か指摘します。

おかげ

答えて

11

私はちょうど私が打撃を受けるまで、様々なフォーマットを試してみてください。

public static String toUtcDate(String dateStr) { 
    SimpleDateFormat out = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 
    // Add other parsing formats to try as you like: 
    String[] dateFormats = {"yyyy-MM-dd", "MMM dd, yyyy hh:mm:ss Z"}; 
    for (String dateFormat : dateFormats) { 
     try { 
      return out.format(new SimpleDateFormat(dateFormat).parse(dateStr)); 
     } catch (ParseException ignore) { } 
    } 
    throw new IllegalArgumentException("Invalid date: " + dateStr); 
} 

を、私はこれを行うライブラリを認識していませんよ。ここで

+0

ご返信ありがとうございます。私は、このソリューションを避け、一般的なものがあるかどうかを調べることを試みていました。有効なものであれば、どの日付形式にも対応できます。このアプローチの問題は、新しいフォーマットがあるたびに、コードを配列に追加しない限り、コードが壊れます。すでにこれに対応しているツールがあれば、私は望んでいました。 – Shamik

+0

私はかつてこのようなことを書いていましたが、私は約1ダース程度しか考えられませんでした。主な問題は、 '01-02-2012'が1月か2月かを決めることでした。なぜなら、ISO' dd-MM-yyyy' *と*愚かなアメリカの書式 'MM-dd-yyyy'の両方でOKです。 – Bohemian

+0

アメリカの書式は視覚的に解析するのが簡単です。それを「愚か」と呼ぶことは、適切なi18nの欠如に答える方法ではありません。 –

0

が答えは:あなたがあなたの日付を持っていたら Converting ISO 8601-compliant String to java.util.Date

、あなたはあなたのUTC時刻を取得する方法を知っています。


編集: 受け入れ答えはジョダ時間が、JAXBを使用していません。

ところで、これらのフォーマットはどこから来たのですか?

String dateStr = "2012-05-23T00:00:00-0400"; 
String dateStr1 = "May 24, 2012 04:57:40 GMT"; 
String dateStr2 = "2011-06-21"; 

彼らは別のロケールと異なる場合、彼らがDateFormat.getDateTimeInstance(...、...)によって生成されたので、おそらく使用されている把握しようとした可能性があります。

+0

返信いただきありがとうございますが、明示的に書式を設定しない限り、Jodaの時間はこのフォーマット「May 24、2012 04:57:40 GMT」を処理することはできません。 – Shamik

+0

私は日付を管理することはできません。さまざまなソースからクロールされており、インデックスが作成されています。 – Shamik

関連する問題