3

java.util.TimeZoneさまざまなタイムゾーンの GMT オフセットを生成するために使用するプログラムがあります。最近、タイムゾーンの 1 つであるアルゼンチンのブエノスアイレスが 1 時間ずれていることが指摘されました。

TimeZoneJavaクラスがオフセットとして何を与えているかを確認するために、簡単なJavaプログラムを作成しました。ブエノスアイレスに間違った値を与えていたことが判明しましたが、他のすべてのタイムゾーン (使用している) は問題ありませんでした。問題は、コードを実行するマシンの Java バージョンである可能性があると思います。一方のマシン (v1.6.0_22) では正しい値が得られ、もう一方 (v1.5.0) では正しくない値が得られます。他の誰かがこのような問題を抱えていましたか、またはオフセット値の違いについて別の説明をしていますか? 使用したテストプログラムは次のとおりです。

import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class TZTest {
  public static void main(String[] args) {
    System.out.println("Java version = "+ System.getProperty("java.version"));

    Calendar now = Calendar.getInstance();
    TimeZone timeZone = now.getTimeZone();

    System.out.println("Current System Time is: " + new Date(System.currentTimeMillis()));
    System.out.println("Current Calendar Time is: " + new Date(now.getTimeInMillis()));
    System.out.println("Current TimeZone is: \"" + timeZone.getDisplayName() + "\": ID = " + timeZone.getID());

    //One ID for the timezone in question
    String id = "America/Argentina/Buenos_Aires";
    TimeZone tz = TimeZone.getTimeZone(id);
    System.out.println("\ntimeZone.getTimeZone(ID) using ID = \""+ id + "\" returns\n" + TimeZone.getTimeZone(id));
    System.out.println("Offset in hours: "+(tz.getOffset(System.currentTimeMillis())/new Double(3600000)));

    //A second ID for the timezone in question
    String id2 = "America/Buenos_Aires";
    TimeZone tz2 = TimeZone.getTimeZone(id2);
    System.out.println("\ntimeZone.getTimeZone(ID2) using ID2 = \""+ id2 + "\" returns\n" + TimeZone.getTimeZone(id2));
    System.out.println("Offset in hours: "+(tz2.getOffset(System.currentTimeMillis())/new Double(3600000)));
  }
}
4

1 に答える 1

5

各Javaリリースには、独自のタイムゾーンデータベースが含まれています(これは、各バージョンのリリースノートに記載されています)。1.5.0は非常に古く、表示しているタイムゾーンの情報が古くなっているか、正しくない可能性があります。

于 2012-01-05T17:54:43.897 に答える