Простой ответ будет, потому что Javadoc говорит так.
public void setDate (ReadableInstant instant)
Установите дату из другого момента. Временная часть этого объекта не будет затронута.
Параметры: Instant - момент, с которого копируется дата, часть времени игнорируется
Броски: IllegalArgumentException - если объектявляется недействительнымобъект является недействительным
Когда Джода говорит «Дата», это означает человеческое значение слова Дата.«Часть этого значения год-месяц-день», а не логический эквивалент java.util.Date.(весь смысл joda в том, чтобы ввести некоторую естественную, разумную семантику в обработку даты и времени.)
РЕДАКТИРОВАТЬ: Чтобы ответить на ваш вопрос «как исправить», просто выполните:
MutableDateTime startDate = new MutableDateTime(dateFormatterJ.parseMutableDateTime(startDateString));
Или, конечно, вручную обнулить временные доли, конечно.
РЕДАКТИРОВАТЬ 2: Хм, я, видимо, не читал достаточно внимательно, это только половина ответа.Будет проверять.
РЕДАКТИРОВАТЬ 3: ну, это меня так напугало, что я потратил минуту на его поиск.
public void setDate(final ReadableInstant instant) {
long instantMillis = DateTimeUtils.getInstantMillis(instant);
Chronology instantChrono = DateTimeUtils.getInstantChronology(instant);
DateTimeZone zone = instantChrono.getZone();
if (zone != null) {
instantMillis = zone.getMillisKeepLocal(**DateTimeZone.UTC**, instantMillis);
}
setDate(instantMillis);
}
По какой-то причине, это сворачивает ваше абсолютное время в UTC доустановка даты.Таким образом, вы даете ему 27.10.2010 00:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ, и оно устанавливает абсолютную величину времени на количество миллисекунд, представляющих 27.10.2010 00:00 UTC, что, конечно, только в 6 или 7 часов вечера до,Затем он находит значение даты EDT, равное 10/26.
Не могу сказать, было ли это каким-то намерением, или это ошибка, которая была там в течение 2 лет или что-то еще.)