Java TimeZone ..で奇妙な問題が発生しています。
TimeZone.getDefault()を呼び出すと、IDが「GMT + 02:00」のローカルタイムゾーンが得られます。面白いことに、このIDはTimeZone.getAvailableIDs()によって提供されるリストに表示されません。どうやら私のゾーンは「Etc/GMT + 2」のように見えます。
コンボにタイムゾーンを設定しようとしていますが、GMT + 02:00がリストにないため選択することはできません。何か案は?
更新:
一番下の行は-ID文字列に依存することはできません。ディスプレイIDはシステムによって異なるため、オフセットを使用する必要があります。
他のSOの質問を振り返ると、これはJava-on-Windowsの問題のようです。 この記事 、特に回答1マッピングの問題を解決できるウィキペディアのリンクへ。
GMT + 02:00はカスタムIDであり、TimeZone.getAvailableIDs()
(これは巨大です)の出力には表示されません。できることは、最初にオフセットを指定してから、指定されたオフセットの使用可能なIDを取得するようユーザーに求めることです。たとえば、GMT + 02:00の場合、次のコード部分:
for (String string : TimeZone.getAvailableIDs(TimeZone.getTimeZone(
"GMT+02:00").getRawOffset())) {
System.out.println(string);
}
次の出力が得られます。
ART アフリカ/ブランタイア アフリカ/ブジュンブラ アフリカ/カイロ アフリカ/ガボローネ アフリカ/ハラレ アフリカ/ヨハネスブルグ アフリカ/キガリ アフリカ/ルブンバシ アフリカ/ルサカ アフリカ/マプト アフリカ/マセル アフリカ/Mbabane Africa/Tripoli Asia/Amman Asia/Beirut Asia/Damascus Asia/Gaza Asia/Istanbul アジア/エルサレム アジア/ニコシア アジア/テルアビブ CAT EET エジプト Etc/GMT -2 ヨーロッパ/アテネ ヨーロッパ/ブカレスト ヨーロッパ/チシナウ ヨーロッパ/ヘルシンキ ヨーロッパ/イスタンブール ヨーロッパ/カリーニングラード Europe/Kiev Europe/Mariehamn Europe/Minsk Europe/Nicosia Europe/Riga Europe/Simferopol ヨーロッパ/ソフィア ヨーロッパ/タリン ヨーロッパ/ティラスポリ ヨーロッパ/ウジゴロド ヨーロッパ/ビリニュス ヨーロッパ/ザポロージエ イスラエル リビア トルコ
まだ大きいですが、今回は人間が閲覧できます。
ジョーダ時間には定数DateTimeZone.UTC
。そのクラスまたは定数が役立つ場合があります。 http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTimeZone.html
Java 8 UPDATE
Java 8にはZoneOffset.UTC
: https://docs.Oracle.com/javase/8/docs/api/Java/time/ZoneOffset.html#UTC
TimeZone.getAvailableIDs()を使用して、スラッシュの前の部分でグループ化し、2段階の選択にするとどうでしょうか。
任意のタイムゾーンは、「GMT」プラス/マイナスオフセットとして指定できます。 timezone doc は、これを「カスタムID」と呼びます。
ドロップダウンにデータを入力するには、特定の都市/オフセットのリストとタイムゾーンへの関連付けを考えた方が良いと思います。 getAvailableIDs()
によって返される配列は巨大です-私のインストールでは586エントリです-そしてこれをユーザーに無理やり突っ込ませたくはありません。