Primeira coisa - boas festas!
Segunda coisa - como você deve saber, java.util.Date sempre guarda o tempo em UTC, mas Date.toString() mostra o tempo conforme o default timezone. Veja se o seu default timezone não está zoado. Por exemplo, minha máquina mostra o tempo corretamente se o setting “Automatically adjust clock for daylight saving changes” estiver checado. Se não estiver, ele mostra uma hora adiantado.
O Java sempre acha que o “setting” do Windows está checado. Portanto ele sempre exige que a máquina esteja com o tempo UTC correto, e com o fuso correto.
importjava.util.*;classTest192{publicstaticvoidmain(String[]args){Datedt=newDate();System.out.println(TimeZone.getDefault());/*Minha máquina (Windows 2003, fuso horário corretamente ajustado, incluindo o setting [X]Automatically adjust clock for daylight saving changes, e java -version mostra java version "1.4.2_06"):sun.util.calendar.ZoneInfo[id="America/Sao_Paulo",offset=-10800000,dstSavings=3600000,useDaylight=true,transitions=129,lastRule=java.util.SimpleTimeZone[id=America/Sao_Paulo,offset=-10800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=9,startDay=8,startDayOfWeek=1,startTime=0,startTimeMode=0,endMode=3,endMonth=1,endDay=15,endDayOfWeek=1,endTime=0,endTimeMode=0]] */}}