SimpleDateFormat дает противоречивые результаты - PullRequest
3 голосов
/ 31 марта 2010

Я пытаюсь разобрать дату и получаю разные результаты, когда я запускаю код локально / BST по сравнению с сервером в Париже / CEST.

Я воспроизвел проблему в следующем примере. Это пытается разобрать дату начала Гран При Австралии.

    TimeZone tz = TimeZone.getTimeZone("AET");
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH mm");
    dateFormat.setTimeZone(tz);
    long time = dateFormat.parse("28/03/2010 17 00").getTime();
    System.out.println("Time "+time);

Похоже, что я правильно устанавливаю часовой пояс в формате даты, и текущий часовой пояс не должен влиять на код. Но локально он печатает 1269756000000, а в Париже - 1269759600000. Есть идеи?

Ответ:

Кажется, что я тестировал с крайним случаем: определение часового пояса на моем Mac отличается от сравнения с сервером linux. Если я изменю часовой пояс на «America / Los_Angeles», я получу постоянный результат. Ящик Linux, который дает мне неправильный результат, работает на Java 1.6.0-b105, который может быть устаревшим. Попробую апгрейд

Ответы [ 2 ]

2 голосов
/ 31 марта 2010

Интересно. Согласно документации TimeZone:

Трехбуквенные идентификаторы часовых поясов для совместимость с JDK 1.1.x, некоторые другие трехбуквенные идентификаторы часовых поясов (например, как "PST", "CTT", "AST") также поддерживается. Тем не менее, их использование устарел, потому что то же самое Аббревиатура часто используется для несколько часовых поясов (например, «КНТ» может быть «Центральный стандарт США» Время »и« Стандартное время Китая »), и тогда платформа Java может только узнайте одного из них.

Было бы интересно увидеть результаты, если вы используете «Австралия / Мельбурн» вместо «AET», но только из быстрого эксперимента, который я сделал, не похоже, что это имеет значение.

Любопытно, что результаты с интервалом в один час, например, переход на летнее время не учитывается ни в одном из случаев. Глупый вопрос; если вы работаете на двух разных компьютерах, вы уверены, что время установлено на каждом?

1 голос
/ 31 марта 2010

В моей системе результат 1269756000000 (как в вашей локальной системе). Я бы попробовал проверить сервер в Париже, особенно настройки, касающиеся часового пояса:

System.out.println(System.getProperty("user.timezone"));
System.out.println(System.getProperty("user.country"));

Возможно, это вызывает некоторые различия, которые помогут вам решить эту проблему.

...