Galera,
Eu busquei aqui no fórum do GUJ, mas não achei a solução.
Eu quero pegar a data e hora atual do sistema. Eu usei as três maneiras abaixo:
[code]
Date d = new Date();
System.out.println( d );
d = Calendar.getInstance( TimeZone.getTimeZone("GMT-03:00") ).getTime();
System.out.println( d );
TimeZone tz = new SimpleTimeZone(Calendar.ZONE_OFFSET, "GMT-03:00");
Calendar ca = GregorianCalendar.getInstance(tz);
d = ca.getTime();
System.out.println( d );[/code]
Estou usando o Windows XP. E tanto rodando a app no JBoss, qaunto como standalone, a hora vem adiantada em duas horas.
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.
import java.util.*;
class Test192 {
public static void main(String[] args) {
Date dt = new Date();
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=36
00000,useDaylight=true,transitions=129,lastRule=java.util.SimpleTimeZone[id=Amer
ica/Sao_Paulo,offset=-10800000,dstSavings=3600000,useDaylight=true,startYear=0,s
tartMode=3,startMonth=9,startDay=8,startDayOfWeek=1,startTime=0,startTimeMode=0,
endMode=3,endMonth=1,endDay=15,endDayOfWeek=1,endTime=0,endTimeMode=0]]
*/
}
}