2014-12-17 2 views
2

Запуск следующий метод в качестве теста на своем собственном классеWeird Дата выпуск

DateTime dt = new DateTime(1942, 11, 16, 1, 0, 0); 
System.out.println(dt.getChronology().getZone().getID()); 
System.out.println(dt); 
System.out.println(dt.withZone(DateTimeZone.forID("Europe/London"))); 
System.out.println(dt.toDate()); 

дает выход:

Europe/London 
    1942-11-16T01:00:00.000+01:00 
    1942-11-16T01:00:00.000+01:00 
    Mon Nov 16 01:00:00 BST 1942 

Однако запуск все испытания, который включает в себя вышеупомянутый метод, результаты in:

Europe/London 
    1942-11-16T01:00:00.000+01:00 
    1942-11-16T01:00:00.000+01:00 
    Mon Nov 16 00:00:00 BDT 1942 

Я немного похудел, как объяснить это поведение .. . Моя система часовых поясов, безусловно, не меняется между двумя видами выполнения теста .....

(Это проблема, так как это также иногда но не воспроизводимо происходит при манипулировании java.util.Date)

+0

Я обычно использовал [nodatime] (http://nodatime.org/), но могли бы вы пройти через него и увидеть создание и что он приносит? – jbutler483

+3

можете ли вы показать * полный * код, который воспроизводит эту проблему. – reto

+3

@ jbutler483: вам было бы трудно сделать это на Java :) –

ответ

0

Проблема заключалась в том, что часовой пояс по умолчанию был явно установлен в части кода, который использовал часовые пояса. В результате каждый другой вызов, который использовал часовой пояс JVM по умолчанию, будет использовать этот новый часовой пояс, что приведет к описанным различиям.

1

Для того, чтобы правильно работать с датами, вы всегда должны указывать часовой пояс при создании даты. Если вы сделаете так, вы не получите странных результатов.

Смежные вопросы