Как исправить неправильное смещение часового пояса в Java 1.5.0? - PullRequest
3 голосов
/ 05 января 2012

У меня есть программа, которая использует 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)));
  }
}

1 Ответ

5 голосов
/ 05 января 2012

каждый выпуск Java включает в себя собственную базу данных часовых поясов (это описано в примечаниях к выпуску для каждой версии).1.5.0 очень старый и, по-видимому, содержит устаревшую или неверную информацию для часового пояса, который вы просматриваете.

...