2016-08-21 8 views
1

JavaのタイムゾーンでZoneRulesを取得する際に問題が発生しました。私はTimeZoneを持っていると私はこのコードを使用してZoneRulesしようとしています:Javaタイムゾーンのゾーンルールを取得すると例外が発生しますか?

TimeZone tz = getTimeZone(); 
ZoneRules rules = ZoneRulesProvider.getRules(tz.toZoneId().getId(), true); 

タイムゾーンは、(例えば"Asia/Dubai"など)地域である場合には、それが正常に動作します。しかし、それは"GMT-07:00"のようにオフセットされたとき、それは例外をスロー:

"ZoneRulesException: Unknown time-zone ID: GMT-07:00". 

私はZoneRulesProvider.getAvailableZoneIds()のすべての出力を印刷し、それが"GMT-07:00"ようにはゾーンが存在しないようだが、ゾーン"Etc/GMT-7"があります。

TimeZoneクラスのtoZoneIdメソッドが無効なZoneIdを返す理由を教えてください。 TimeZoneを有効なZoneIdに変換する正しい方法は何ですか。

答えて

2

getTimeZone()メソッドでTimeZoneをどのように作成するかはわかりません。 00が、唯一「など/ GMT-7」(とりわけ):タイムゾーンは、GMT-07が表示されないことを、

for (String zoneId : TimeZone.getAvailableIDs()) { 
     System.out.println(zoneId); 
    } 

あなたが表示されますが、以下のように取得することができ、サポートIDのリストを持っています。あなたのコードが実行しているようです。

TimeZone timeZone = TimeZone.getTimeZone("GMT-07:00"); 

カスタムIDを持つTimeZoneを作成します。 には次のように記載されています。

ZoneIdで使用されるように、ゾーンIDが主に参照されます。ゾーン・リージョンIDのみが使用され、ゾーン・オフセットIDはここでは使用されません。

TimeZone customTimeZone = TimeZone.getTimeZone("GMT-07:00"); 
    TimeZone officialTimeZone = null; 
    for (String timeZoneId : TimeZone.getAvailableIDs()) { 
     if (TimeZone.getTimeZone(timeZoneId).hasSameRules(customTimeZone)){ 
      officialTimeZone = TimeZone.getTimeZone(timeZoneId); 
      break; 
     } 
    } 
    ZoneRules zoneRules = ZoneRulesProvider.getRules(officialTimeZone.toZoneId().getId(), true); 
    System.out.println(zoneRules); 

または代わり

TimeZone officialTimeZone = TimeZone.getTimeZone(TimeZone.getAvailableIDs(TimeZone.getTimeZone("GMT-07:00").getRawOffset())[0]); 
    ZoneRules zoneRules =ZoneRulesProvider.getRules(officialTimeZone.toZoneId().getId(), true); 
    System.out.println(zoneRules); 
+0

次のコードを試し、公式のタイムゾーンを取得するには、あなたのギュンターありがとうございます。私はGMT -07:00がカスタムIDのタイムゾーンであることを知らなかったので、利用可能なタイムゾーンIDをチェックすることは考えていませんでした。これはTimeZoneクラスのドキュメントでも説明されているので、それを読んでいないのは私のせいです。とにかく、あなたのコードは素晴らしいです。再度、感謝します。 –

関連する問題