This is a problem easily reproducible in 1.3.1_xx . It is not a problem with 1.4.2 or 1.5
Attached is a simple test case which reproduces the problem.
Before running the test, change the system time settings as follows.
Change the Date to April 4, 2004 and time to 1:58:00 AM ( This is 2 min before we switched over to daylight savings time this year) Set the timezone to Pacific , but UNCHECK the "Automatically adjust clock for daylight savings changes". (as in the attached picture). This is important to reproduce the problem.
Run the attached class.
Now, let the system time change to 2:00am on April 4, then run the test class again. You will see that the system time shows 2:00am, while the test class output shows 3:00am.
It seems that if in the system time setting, you select a timezone that has the checkbox to adjust for daylight savings, the jvm does not recognize the fact that this box is unchecked. Timezones such as Arizona and Indiana which do not even display this checkbox (and do not change for daylight savings) work fine.