2013-04-05 9 views
8

Windowsマシン上でJavaプログラムを実行しています。タイムゾーンとその関連情報のリストを取得しようとしています。生成されたタイムゾーンのJavaが正しいタイムゾーン情報を生成しない

String[] allTimeZones = TimeZone.getAvailableIDs(); 
    Date now = new Date(); 
    for (int i = 0; i < allTimeZones.length; i++) { 
     TimeZone tz = TimeZone.getTimeZone(allTimeZones[i]); 
     System.out.format("%s;%s; %f \n", 
          allTimeZones[i], 
          tz.getDisplayName(), 
          (float) (tz.getOffset(now.getTime())/3600000.0)); 
    } 

つあり、次の情報:ここでは完全なプログラムです

アメリカ/ニューヨーク、東部標準時。 -4.000000

これは不可解です。この瞬間、ニューヨークは東夏夏時間になります。したがって、上記の情報は正しくありません。

誰も私が

アメリカ/ニューヨークを生成するためにJavaを作ることができる方法を知っています。東部標準時。 -5.000000

またはこの

アメリカ/ニューヨークのようなもの;東夏夏時間。助けのための-4.000000

ありがとう!

daylightためtrueに渡しよろしく

+1

http://www.timeanddate.com/worldclock/city.html?n=179 –

+0

あなたが世界にタイムゾーンの全てを取得する方法を求めて、あるいはどのようにされています。これは、トリックを行う必要がありますあなたのコードが実行されているコンピュータのOSで定義されている "ローカルタイム"を取得するには? –

+1

また、[JodaTime](http://joda-time.sourceforge.net/)もチェックしてください。これは、より良い日付/時刻ライブラリとみなされます。 –

答えて

2

使用getDisplayName(daylight, style)、。これは、印刷します:

America/New_York;Eastern Daylight Time; -4.000000 

しかし、あなたは、現在の時刻が夏時間であるか否かを判断する必要があります(またはそれは常にさえ秋と冬に、「夏時間」を返します)。

String[] allTimeZones = TimeZone.getAvailableIDs(); 
Date now = new Date(); 
for (int i = 0; i < allTimeZones.length; i++) { 
    TimeZone tz = TimeZone.getTimeZone(allTimeZones[i]); 
    System.out.format("%s;%s; %f \n", allTimeZones[i], 
      tz.getDisplayName(tz.inDaylightTime(now), TimeZone.LONG), 
      (float) (tz.getOffset(now.getTime())/3600000.0)); 
} 
+0

ありがとうございました。あなたは私のヒーローです!私はそれをテストしました。私が正しく理解していることを確認してください。あなたのコードは、各ゾーンが標準または夏時間とオフセットのどちらであるかを正確に判断して表示します。 – curious1

+0

実際には、あなたのタイムゾーンでしか動作しないかもしれません。私はそれを広範囲にテストしませんでしたが、コンピュータのタイムゾーンの設定を変更して、異なる日付を試すことができます(たとえば、米国の夏時間がヨーロッパの夏時間より前に開始されるため、その日付をテストします)。 夏時間に関係なくオフセットを使用する場合は、tz.getRawOffset()(引数なし)を使用してください。たとえば、東部時間帯では、その年の日に関係なく-5時間を返します。 – Jimothy

+0

ジムシー、私は異なる日付とタイムゾーンを試しましたが、タイムゾーンとその情報のリストが正しいと思われます。もう一度、ありがとう! – curious1

関連する問題