У меня есть программа, которая использует java.util.TimeZone
для получения смещений GMT для различных часовых поясов.Недавно было отмечено, что один из часовых поясов был отключен на час, Аргентина, Буэнос-Айрес.
Я написал простую программу Java, чтобы увидеть, что класс java TimeZone
дает в качестве смещения.Оказывается, он дал неправильное значение для Буэнос-Айреса, но все другие часовые пояса (которые мы используем) были в порядке.Я думаю, что проблема может быть в версии 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)));
}
}