7

Solr にインデックスを付ける前に、次の形式で日付を渡すことができるという要件があります。渡される日付の例を次に示します

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 を試しましたが、さまざまな形式をサポートする汎用プログラムを作成できません。解析例外をスローしてしまいます。

私もjoda timeを試しましたが、これまでのところ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);
    }

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

任意のポインタをいただければ幸いです。

ありがとう

4

2 に答える 2

14

ヒットするまで、さまざまなフォーマットを試してみます。

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

これを行うライブラリを知りません。

于 2012-05-25T23:45:56.807 に答える
0

答えは次のとおりです 。ISO 8601準拠の文字列をjava.util.Dateに変換する

日付を取得したら、UTC 時刻を取得する方法がわかりました。


編集:受け入れられた回答は、joda time ではなく 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(...,...) によって生成された可能性があるため、どちらが使用されているかを調べてみてください。

于 2012-05-26T00:10:48.383 に答える