Я использую строки кода:Клиринговый Calendar.HOUR добавляет сотни дней
1 GregorianCalendar cal = (GregorianCalendar) date.clone();
2 cal.clear(Calendar.HOUR);
При использовании этого кода в модульном тесте - он работает просто отлично. Однако при запуске на моем устройстве Android он, похоже, сломается. Вот что говорит мой отладчик:
После линии 1: cal.getTimeInMillis() = 1426022494179
После линии 2: cal.getTimeInMillis() = 1450905694179
Я также попытался cal.set(Calendar.HOUR, 0)
и он делает то же самое.
EDIT: После некоторого тестирования, оказывается, что установка или очистка ничего на объекте кала сразу ставит меня на 24 декабря года, вы в настоящее время, однако, как только начальный переход на Dec 24 происходит, Календарь. затем действует нормально.
Любая вероятность того, что вы настаиваете на использовании 'clone()', заключается в том, что вы фактически используете (пользовательский) подкласс 'GregorianCalendar'? Объекты «Календарь» хранят поля отдельно от фактического объекта даты, и не каждая операция синхронизирует их все время, особенно нет, если вы создали свой собственный подкласс, который делает кто-знает-что. –
Нет - я использую GregorianCalendar из Android SDK 21. – Zambezi