2017-02-15 18 views
1

Я пытаюсь создать фиксированное время с использованием joda DateTime, неожиданно разные результаты производятся на основе времени выполнения кода (текущее системное время). Вот кодDateTime API дает отличный результат в зависимости от времени выполнения кода

DateTimeZone.setDefault(DateTimeZone.forID("Europe/Brussels")); 
DateTime t1 = new DateTime().withDate(2012, OCTOBER, 28).withTime(2, 0, 0, 50); 
//Note that 2012, OCTOBER, 28, 02:00:00 is a DST swtich time in Belgium 

Код производит два различных результата (смещение часового пояса изменения)

//Please note that the local time zone is CET. 
00:00:00:00 > execution time < 03:00:00 -> 2012-10-28T02:00:00.050+02:00 
03:00:00:00 >= execution time =< 24:00:00 -> 2012-10-28T02:00:00.050+01:00 

С другой стороны, с помощью конструктора дает тот же результат

DateTimeZone.setDefault(DateTimeZone.forID("Europe/Brussels")); 
DateTime dateTime = new DateTime(2012, OCTOBER, 28, 2, 0, 0, 50); //gives 2012-10-28T02:00:00.050+02:00 

I имеют впечатление, что следует использовать конструктор вместо методов date/Time. Но я немного смущен, почему DateTime не может справиться с этим?

ответ

1

Ну, выражение new DateTime() разумно для времени выполнения, поэтому оно в конечном итоге получает другое смещение. Для конкретных конкретных значений существует амбивалентность (то же самое местное время происходит два раза!).

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

withLaterOffsetAtOverlap() 

или

withEarlierOffsetAtOverlap() 

Смотрите также javadoc из DateTime.

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

  • Нет связанных вопросов^_^