Since this doesn't have anything to do with Swing/JFC/AWT GUI stuff, I'm moving this post to the
Java In General - Intermediate forum.
Also, the reason for this is probably due to the fact that to calculate a leap year in the present, future, or recent past all you need is the formula that a leap year is a year divisable by 4, but not 100, unless it is also divisible by 400. However, if you go far into the past, you also have to apply historical knowledge that doesn't follow a formula. Prior to October 15, 1582 dates you get from the GregorianCalendar class will actually use the Julian calendar instead. The Julian calendar also has leap years, and they are (were?) calculated similarly to the Gregorian calendar. However, the concept of the leap year was only introduced in 46 BC, and there's a gap between 9 BC and 8 AD due to making up for miscalculations early on. (Most of this information was gleaned from
this page.)
So, 2004 BC would not be a leap year because leap years did not exist at that point. (err.. well... at least as a concept.)