「EDT」や「+0330」などのタイムゾーン文字列表現から(joda)DateTimeZoneオブジェクトを作成する方法はありますか?
3 に答える
jodatimeは3文字のタイムゾーン識別子(「UTC」を除く)をサポートしていませんが、サポートしていることを指摘する価値があるかもしれませんjava.util.TimeZone
。次のメソッドを使用して、DateTimeZone
からインスタンスを作成できます。TimeZone
DateTimeZone.forTimeZone
DateTimeZone.forTimeZone(TimeZone.getTimeZone("..."))
ただし TimeZone
、「EDT」もサポートしていません。Javadocから:
JDK 1.1.xとの互換性のために、他の3文字のタイムゾーンID( "PST"、 "CTT"、 "AST"など)もサポートされています。ただし、それらの使用は非推奨です...
「いくつか」に注意してください。これを書いている時点では、PDTはTimeZone.getAvailableIDs()
(少なくともideone.comでは)リストされていません。ここで「PDT」を使用しようとすると、GMTタイムゾーンになります。
[
TimeZone.getTimeZone
戻り値]指定されたTimeZone、または指定されたIDが理解できない場合はGMTゾーン。
したがって、サポートされているタイムゾーン識別子に対してのみ使用を試みることが保証されない限り、このアプローチは避けるのが最善です。
このコードを使用して、DateTimeZoneオブジェクトを取得できます-
//User Defined
DateTimeZone dtz = DateTimeZone.forID("America/New_York");
//System Default TimeZone
DateTimeZone dtzz = DateTimeZone.forID(TimeZone.getDefault().getID());
Joda APIは、短縮されたタイムゾーン名(「EDT」など)のマッピングをサポートしていません。
なんで?
あいまいだから!たとえば、EDTはUTC-4またはUTC+11のいずれかを意味します。
したがって、マッピングを実装する場合は、名前をどのようにマッピングするかを決定してから、自分でマップを作成してデータを設定する必要があります。
出典: http ://www.timeanddate.com/library/abbreviations/timezones/