2012-03-26 1 views
3

GMTの日付を返すサービスを呼び出します。 11月からうまくいきましたが、現在は夏時間のアクティブな状態で、失敗しています。ここでは非夏時間からのサンプルの日付があります:「Z」と「+1:00」の両方のサフィックスを持つ日付に対して、SimpleDateFormatパターンを1つ使用できますか?

2011-12-07T15:50:01Z 

そして、今日から1(夏時間に):

2012-03-26T11:05:01+01:00 

以前私はこのパターンを使用してきた:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.UK); 

しかし、上記の2番目の日付でParseExcepton( "Unparsable date ...")で失敗しています。それで、どちらのパターンもどちらのパターンに使うことができますか?両方に1つのパターンを使用できない場合、上記の2番目の日付の正しいパターンは何ですか?

違いはありませんが、もしそうなら、これはAndroidプラットフォーム上で使用されています。

答えて

2

あなたが指定に「リテラルを使用しているパターンのJava 5/6または7

を使用していたならば、それはこのケースで違いになるだろうとして、それは間違いなく、あなたは、Androidを使用している違いがZ '(また' T ')を解析する。タイムゾーンを解析していません。実際のタイムゾーンの解析を開始するには、 'Z'の前後にある一重引用符を削除する必要があります。

Android JavaDocによれば、時間/分の形式はきわめて明確であるため、資本Zがこの場合でも機能するかどうかは不明です。私は確かめるためにAndroid SDKについては十分に分かっていませんが、コロンは標準Javaの違いを明確にしています。

+1

感謝を適用する必要があります!私は 'Z'の周りに単一引用符を削除しようとしました、そして、それは2番目の日付( ':'を削除した後)で動作しますが、最初のものではありません。条件付きで解析する日付形式を選択する必要があるように見えます。 –

+0

いいえ、日付を解析する前に、 '+01:00'の末尾に' Z'を置き換えてください(存在する場合)。 'Z'はこのオフセットのシンボルです。 – caw

2

新しいISO8601タイムゾーンパターンは、Java 7で導入されたXパターン指定子でカバーされています。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.UK); 

あなたがJava 6歳以上にはまだしている場合は、はい、それは違いを生むことがあります。あなたはそれを(部分的に)解析するか、Joda Timeを取得する必要があります。あなたはJava6のを使用する場合は

1

、あなたはそれが簡単な答えではないでしょう、知られている必要がありますスペンサーのパターンを識別して、フォーマッタに

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 
    String date2Str="2011-12-07T15:50:01Z"; 
    Date date2 = df.parse(date2Str); 
    System.out.println(date2.toString()); 

    SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"); 
    String date1Str="2012-03-26T11:05:01GMT+01:00"; 
    Date date1 = df2.parse(date1Str); 

    System.out.println(date1.toString()); 
関連する問題