Я создаю приложение CalendarDisplay для Android. Помимо прочего, это приложение позволяет пользователю выбирать количество дней, которые нужно добавить к эпохе (эпоха - это дата в 1899 г.), и этот результат будет графически представлен на дисплее. Однако, когда я устанавливаю значение Date из значения Calendar, я получаю неожиданные результаты: кажется, что год отличается от значения 1900. Хотя я мог бы просто добавить 1900 к результату, это кажется неправильным ответом, поскольку я делаю это (я верю) по книге. Или я мог бы продолжить с тем, что у меня есть; это тоже работает. Но это то же самое, что и книга. Вот код с запасными переменными для отладки:
public void gotoCal(int days) {
// epochCal has been initialized as follows:
// (HYF_BASE_YEAR = 1899, HYF_BASE_MONTH = 11, HYF_BASE_DAY = 1)
// epochCal = (Calendar) Calendar.getInstance();
// epochCal.set(HYF_BASE_YEAR, HYF_BASE_MONTH, HYF_BASE_DAY);
Calendar cal = (Calendar) epochCal.clone();
cal.add(Calendar.DATE, days);
int year = cal.get(Calendar.YEAR);
Date date = cal.getTime();
int year2 = date.getYear();
if (year2 != year) {
date.setYear(year);
}
int year3 = date.getYear();
gotoDate(date);
}
Теперь, когда я запускаю этот код в режиме отладки как gotoCal (40000) с точкой останова в строке gotoDate (), я вижу следующие значения в полях:
год = 2009,
год2 = 109,
год3 = 2009
Является ли функция Calendar.getTime () предполагаемой , чтобы вернуть дату, прошедшую 1900 лет назад (я не видел такой документации)? Или я могу что-то сделать, чтобы повлиять на это? Или что еще я могу делать не так?