2

このように送信された日付を解析したい..

2011-03-02T09:06:07.404-07:00

問題は、SimpleDateFormat オブジェクトを使用するときに解析例外が発生することです。タイムゾーンのコロンが原因であると確信しています。

これがSimpleDateFormatのセットアップです。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

そして、開発者ドキュメントからの解析可能な日付文字列の可能な差異のリストを次に示します。ご覧のとおり、タイムゾーンにコロンが含まれているものはありません。

                     yyyy-MM-dd 1969-12-31
                     yyyy-MM-dd 1970-01-01
               yyyy-MM-dd HH:mm 1969-12-31 16:00
               yyyy-MM-dd HH:mm 1970-01-01 00:00
              yyyy-MM-dd HH:mmZ 1969-12-31 16:00-0800
              yyyy-MM-dd HH:mmZ 1970-01-01 00:00+0000
       yyyy-MM-dd HH:mm:ss.SSSZ 1969-12-31 16:00:00.000-0800
       yyyy-MM-dd HH:mm:ss.SSSZ 1970-01-01 00:00:00.000+0000
     yyyy-MM-dd'T'HH:mm:ss.SSSZ 1969-12-31T16:00:00.000-0800
     yyyy-MM-dd'T'HH:mm:ss.SSSZ 1970-01-01T00:00:00.000+0000

私の 2 番目の問題は、タイムゾーンが Z に設定されている日付文字列を取得するときです。これは、0000 に相当する GMT としてタイムゾーンを設定するための標準です。しかし、再び ParseException が発生します。日付文字列の例を次に示します。

2011-01-14T10:50:31.520Z

編集

日付文字列を解析する方法は次のとおりです..

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = null;
try {
    Log.d("CCDateUtilss", "Need to remove the colon from the date string in the timeszone");
    date = sdf.parse(string);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
return date.getTime();

考えられる解決策

問題の発生を文字列で置き換えて、正しく解析できるようにすることはできますか、それとも私が知らないより洗練された解決策がありますか?

前もって感謝します

4

1 に答える 1

3

次のapprocahを使用して、さまざまな形式(コロン付きのタイムゾーンを含む)を返す可能性のあるさまざまなソースからのテキスト日付を解析します。

private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");


private long getTime(String time) throws Exception {
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    }
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        //For this you may need to manually adjust time offset
    }
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
    }
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'Z'");
        //For this you may need to manually adjust time offset
    }
    return this.format.parse(time).getTime();
}

Note:文字列が。で終わる場合は、タイムゾーンオフセットを手動で調整する必要がありますZ

効率を上げるために、これは常に最初に最後の動作フォーマットを試します。

よろしく。

于 2012-11-20T12:33:13.957 に答える