Почему текущий год в дате сохраняется как 3912?

чтобы получить текущую дату и время

final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);

для создания текущего объекта даты

Date toDate;
     toDate.setYear(mYear);
     toDate.setMonth(mMonth);
     toDate.setDate(mDay);



Date endDate = toDate;

при печати объекта endDate я получил

Mon Jan 01 13:11:00 GMT+03:00 3912

почему?

Ответ 1

Из Date.setYear(int) description: Устанавливает gregorian календарный год с 1900 года для этого объекта Date. Таким образом, 1900 + 2012 = 3912.

Но calendar.get(Calendar.YEAR) возвращает точный номер года 2012. Таким образом, эта несогласованность API вызывает вашу проблему. Но в любом случае Date.setYear(int) устарел, поэтому лучше использовать Calendar объект для расчета даты.

Ответ 2

Лучше использовать Календарь

Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR,myear);

(т.е.)

cal.set(Calendar.YEAR,2016);