2011-08-10 20 views
5

私が取得している時間は、 "2011-07-31T08:16:37.733Z"という形式です。実際には、Zはタイムゾーンでなければなりません。その後、その時間はローカルタイムゾーンに変換されます。実際にこの時間をデフォルトのタイムゾーンに実際に変換するにはどうすればいいですか?時間をYYYY-MM-DDTHHに変換する方法:mm:ss.SSSZ形式をデフォルトのタイムゾーンに変換しますか?

答えて

11

RFC3339には、日付/時刻表現のための特定のISO 8601の「プロファイル」が記載されています。

サードパーティのオープンソースライブラリを使用する場合は、Joda-TimeのISODateTimeFormatユーティリティクラスをご覧ください。

独自のコードを公開する必要がある場合は、SimpleDateFormatを使用するだけでは十分ではありません。なぜなら、ISO 8601/RFC 3339がタイムゾーン情報を表す方法のためです。

あなたが解析する必要があるのは、それは比較的簡単です、 'Z'(ズールーまたはUTC)にある場合:

String input = "2011-08-11T01:23:45.678Z"; 
TimeZone utc = TimeZone.getTimeZone("UTC"); 
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
f.setTimeZone(utc); 
GregorianCalendar cal = new GregorianCalendar(utc); 
cal.setTime(f.parse(input)); 
System.out.println(cal.getTime()); 

は "2011-08-11T01を:23:45.678Z" をプリントアウトするべきであるあなたにローカルタイムゾーン。

RFC3339で任意のタイムゾーンを処理する必要がある場合は、上記を拡張してタイムゾーン識別子を解析し、対応するJava TimeZoneインスタンスを取得する必要があります。 +/- GMTの時間があればそれほど難しくはありませんが、非標準オフセットの場合は独自のSimpleTimeZoneインスタンスを作成する必要があります。

0
private static SimpleDateFormat DATE_TIME_FORMAT=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 

DATE_TIME_FORMAT.setTimeZone(TimeZone.getID()); //for example 
date=DATE_TIME_FORMAT.format(curDate); 
+0

私は、日付が来る形式を述べました。その日付はRFC3339形式です。 RFC3339の日付を解析する方法を知っていれば、私に知らせてください。 – sunil

+0

上記の編集は役に立ちましたか? これは役立つかもしれません:http://cokere.com/RFC3339Date.txt – atzu

関連する問題