title: Why is the Java date API (java.util.Date, .Calendar) such a mess?
body: <p>As most people are painfully aware of by now, the Java API for handling calendar dates (specifically the classes <code>java.util.Date</code> and <code>java.util.Calendar</code>) are a terrible mess.</p>
  
  <p>Off the top of my head:</p>
  
  <ul>
  <li>Date is mutable</li>
  <li>Date represents a timestamp, not a date</li>
  <li>no easy way to convert between date components (day, month, year...) and Date</li>
  <li>Calendar is clunky to use, and tries to combine different calendar systems into one class</li>
  </ul>
  
  <p><a href="http://www.jroller.com/cpurdy/entry/the_seven_habits_of_highly" rel="noreferrer">This post</a> sums it up quite well, and <a href="http://jcp.org/en/jsr/detail?id=310" rel="noreferrer">JSR-310</a> also expains these problems.</p>
  
  <p>Now my question is: </p>
  
  <p>How did these classes make it into the Java SDK? Most of these problems seem fairly obvious (especially Date being mutable) and should have been easy to avoid. So how did it happen? Time pressure? Or are the problems obvious in retrospect only?</p>
  
  <p>I realize this is not strictly a programming question, but I'd find it interesting to understand how API design could go so wrong. After all, mistakes are always a good learning opportunity (and I'm curious).</p>