📝
JDK1.0 でありますまいか
JDK 1.0 (Java 1.0.2) を入手したので、GitHub に置いておきました。 とのこと。
でjava.util.Date が読めるということ。
java.util.Dateは、JDK1.1の時に改訂されて以来、実はまだ大きな改訂がありません。Java SE 5.0のときに@Deprecatedアノテーションが導入されていますが、それもほんの些細なことです。Java SE 8ではDate and Time APIとの相互運用性のためのメソッドが追加されましたが、JDK1.1の時に比べれば小規模な改修にとどまりました。先ほどからJDK1.1の時の改訂ばかり強調していますが、それがjava.util.Dateをほとんど書き換えてしまうほどの大改訂だったことが推測されるからです。
オリジナルのjava.util.Dateの実装については、残念ながらJDK1.0を入手することができないので断言できませんが、現状の内部表現がほぼCalendar(JDK1.1から追加)ベースになっていることから、相当の規模であったことが予想されます。
What happen to java.util.Date between JDK 1.0 and JDK 1.1?
どうせなら1.1と比べたいと思ったが色々要準備なので未達。
だが大改訂の真相が一旦以下と比べることでできそう。
/**
* Creates today's date/time.
*/
public Date () {
this(System.currentTimeMillis());
}
/**
* Allocates a <code>Date</code> object and initializes it so that
* it represents the instant at the start of the second specified
* by the <code>year</code>, <code>month</code>, <code>date</code>,
* <code>hrs</code>, <code>min</code>, and <code>sec</code> arguments,
* in the local time zone.
*
* @param year the year minus 1900.
* @param month the month between 0-11.
* @param date the day of the month between 1-31.
* @param hrs the hours between 0-23.
* @param min the minutes between 0-59.
* @param sec the seconds between 0-59.
* @see java.util.Calendar
* @deprecated As of JDK version 1.1,
* replaced by <code>Calendar.set(year + 1900, month, date,
* hrs, min, sec)</code> or <code>GregorianCalendar(year + 1900,
* month, date, hrs, min, sec)</code>.
*/
@Deprecated
public Date(int year, int month, int date, int hrs, int min, int sec) {
int y = year + 1900;
// month is 0-based. So we have to normalize month to support Long.MAX_VALUE.
if (month >= 12) {
y += month / 12;
month %= 12;
} else if (month < 0) {
y += CalendarUtils.floorDivide(month, 12);
month = CalendarUtils.mod(month, 12);
}
BaseCalendar cal = getCalendarSystem(y);
cdate = (BaseCalendar.Date) cal.newCalendarDate(TimeZone.getDefaultRef());
cdate.setNormalizedDate(y, month + 1, date).setTimeOfDay(hrs, min, sec, 0);
getTimeImpl();
cdate = null;
}
/**
* Creates a date. The fields are normalized before the Date object is
* created. The arguments do not have to be in the correct range. For
* example, the 32nd of January is correctly interpreted as the 1st of
* February. You can use this to figure out what day a particular date
* falls on.
* @param year a year after 1900
* @param month a month between 0-11
* @param date day of the month between 1-31
* @param hrs hours between 0-23
* @param min minutes between 0-59
* @param sec seconds between 0-59
*/
public Date (int year, int month, int date, int hrs, int min, int sec) {
expanded = true;
valueValid = false;
tm_millis = 0;
tm_sec = (byte) sec;
tm_min = (byte) min;
tm_hour = (byte) hrs;
tm_mday = (byte) date;
tm_mon = (byte) month;
tm_wday = 0;
tm_yday = 0;
tm_year = year;
computeValue();
expand();
}
Discussion