Why were most java.util.Date methods deprecated?
Solution 1:
Well, for two related reasons. It was a very poor implementation of the concept of Dates and Times and it was replaced by the Calendar
class.
The Calendar
class, although an improvement, leaves a lot to be desired as well, so for serious Date/Time work, everyone recommends Joda-Time. Java 8 brings the new java.time.* package, inspired by Joda-Time, defined by JSR-310, and intended to supplant the old Date/Calendar classes.
Edit: In response to the specific question of why the implementation is poor, there are many reasons. The JavaDoc sums it up as follows:
Unfortunately, the API for these functions was not amenable to internationalization.
In addition to this general deficiency (which covers issues like the lack of a Time Zone component as well as the date formatting which is better handled in DateFormat
and the inability to have a non-Gregorian calendar representation), there are specific issues which really hurt the Date
class, including the fact that year is presented in an offset of 1900 from Common Era year.
Calendar
has its own problems, but even as early as JDK 1.1 it was obvious that java.util.Date
was not going to cut it. Even though Calendar
is arguable the worst JDK API, it has taken until version 7 to attempt to address it.
Solution 2:
-
Date
is mutable -
Date
doesn't have support for time zones
The latter led to it being replaced by Calendar
. And the former, combined with the ease-of-use, lead to both being replaced by Joda-Time / JSR-310 (java.time.* package)