2015-10-14 7 views
0

Когда я запускаю следующий java-код в JDeveloper, я получаю неправильный вывод. Каковы могут быть причины этого?Java Jdeveloper

System.out.println(TimeZone.getTimeZone("Australia/Sydney").inDaylightTime(new Date())); 
    System.out.println(TimeZone.getTimeZone("Europe/Moscow").inDaylightTime(new Date())); 

Я ожидаю выход как: правда ложь

Но, я получаю как: ложного истинного

PS: Это работает правильно для нескольких других часовых поясов, как «Америка/Форт-Вайне» и «Европа/Берлин».

+1

Неправильно ли дата на вашем компьютере? http://ideone.com/BPhYKq дает true false – zapl

+0

№. Дата на моем компьютере верна и находится в часовом поясе Форт-Уэйн. Я изменил его на UTC и по-прежнему получил ту же ошибку. –

ответ

1

Поскольку использование new Date() не полностью следуя принципу How to create a Minimal, Complete, and Verifiable example, вот оно:

public static void main(String[] args) { 
    Date date = new Date(1444817534489L); // 2015-10-14 10:12:14.489 UTC 
    printDate(date, "UTC"); 
    printDate(date, "Australia/Sydney"); 
    printDate(date, "Europe/Moscow"); 
    printDate(date, "Europe/Berlin"); 
    printDate(date, "America/Fort_Wayne"); 
} 
private static void printDate(Date date, String timeZoneID) { 
    TimeZone timeZone = TimeZone.getTimeZone(timeZoneID); 
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z"); 
    df.setTimeZone(timeZone); 
    System.out.printf("%-20s %-30s inDaylightTime: %s%n", timeZoneID + ":", 
         df.format(date), timeZone.inDaylightTime(date)); 
} 

Выход

UTC:     2015-10-14 10:12:14.489 UTC inDaylightTime: false 
Australia/Sydney: 2015-10-14 21:12:14.489 AEDT inDaylightTime: true 
Europe/Moscow:  2015-10-14 13:12:14.489 MSK inDaylightTime: false 
Europe/Berlin:  2015-10-14 12:12:14.489 CEST inDaylightTime: true 
America/Fort_Wayne: 2015-10-14 06:12:14.489 EDT inDaylightTime: true 

Так, true false, как вы ожидали. Если вы видели разные, может быть, ваша дата была другой, и, не печатая ее, как бы вы узнали?

+0

Но мой вывод выглядит следующим образом: 'code'15/10/14 10:47:13 UTC: 2015-10-14 10: 12: 14.489 UTC inDaylightTime: false 15/10/14 10:47:13 Австралия/Сидней: 2015-10-14 20: 12: 14.489 EST inDaylightTime: false 15/10/14 10:47:13 Европа/Москва: 2015-10-14 14: 12: 14.489 MSD inDaylightTime: true 15/10/14 10:47:13 Европа/Берлин: 2015-10-14 12: 12: 14.489 CEST inDaylightTime: true 15/10/14 10:47:13 Америка/Fort_Wayne: 2015-10-14 06: 12: 14.489 EDT inDaylightTime: true'code' –

+0

Значение «z» для идентификатора зоны «Австралия/Сидней» на моем выходе - «EST» вместо «AEDT». Точно так же значение «z» для идентификатора зоны «Европа/Москва» - это «MSD» вместо «MSK». Что может быть причиной этого? Это как-то связано с версией java? –

+0

Конечно. Какую версию вы используете? Я запускаю jdk1.8.0_51, 64-бит, на Win7. – Andreas