Код: Выделить всё
* In all methods of class Date
* year, month, date, hours, minutes, and seconds values, the
* following representations are used:
*
- *
- A year y is represented by the integer
* y.Код: Выделить всё
-1900
Конечно, в Java 1.1 метод getYear() и ему подобные были устаревшими в пользу java.util.Calendar, который до сих пор есть это странное примечание об устаревании:
И, конечно, Месяц основан на 0, но мы все это знаем (хотя можно подумать, что они удалили эту проблему из Календаря - не сделали):Код: Выделить всё
int getYear() Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.YEAR) - 1900. setYear(int year) Deprecated. As of JDK version 1.1, replaced by Calendar.set(Calendar.YEAR, year + 1900).
Я проверил следующие вопросы:Код: Выделить всё
* A month is represented by an integer from 0 to 11; 0 is January, * 1 is February, and so forth; thus 11 is December.
Почему Date.getYear в Java () возвращает 111 вместо 2011?
Почему API даты Java (java.util.Date, .Calendar) такой беспорядок?
Мой вопрос:
Что могли придумать первоначальные создатели Java .util.Date надеялся получить выгоду от хранения данных «года», вычитая из него 1900? Особенно, если он в основном хранится как длинный.
Код: Выделить всё
private transient long fastTime;
@Deprecated
public int getYear() {
return normalize().getYear() - 1900;
}
@Deprecated
public void setYear(int year) {
getCalendarDate().setNormalizedYear(year + 1900);
}
private final BaseCalendar.Date getCalendarDate() {
if (cdate == null) {
BaseCalendar cal = getCalendarSystem(fastTime);
....
- Почему 1900?
Подробнее здесь: https://stackoverflow.com/questions/262 ... -year-1900