Calendar does not have that "based on 1900" thingy - when you retrieve its year you'll get 2009 instead of 109. Basing java.util.Date's year on 1900 was a design decision, probably inspired by the thought that people would never need dates before 1900. That's why retrieving years etc is deprecated in Date -
you should use Calendar for that:
As for why the months are 0 based, that probably has something to do with arrays. Arrays in Java are all 0 based, so Calendar.JANUARY would be the index of the first element of the array.
Now of course Sun screwed up that line of thought by having the weekdays start at Calendar.SUNDAY - which is 1, not 0. DateFormatSymbols just adds an empty element in the weekday arrays. Go figure...