java.util.TimeZone
さまざまなタイムゾーンの GMT オフセットを生成するために使用するプログラムがあります。最近、タイムゾーンの 1 つであるアルゼンチンのブエノスアイレスが 1 時間ずれていることが指摘されました。
TimeZone
Javaクラスがオフセットとして何を与えているかを確認するために、簡単な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)));
}
}