Datas em Java

2 respostas
P

Alguém sabe o que pode estar acontecendo com a hora no Java?

Pois ao usar a classe Date (java.util.Date dia = new
java.util.Date():wink: para pegar a data e hora, a hora está sempre
retornando uma a mais do que está no sistema operacional. Já testei
isto em Windows e Linux e em ambos está acontecendo isto. É a partir
de 10/10/2004, se retornar a data para qualquer uma antes de 10/10,
volta ao normal! Parece que tem algum controle interno para horário de
verão! Será que tem como desativar?

2 Respostas

T

É o horário de verão sim senhor.

Só não sei lhe responder “na bucha” como é que se faz para ativar ou desativar. A culpa toda é do Lula, ou do Fernando Henrique, como queiram - é que o horário de verão não tem regra fixa aqui no Brasil. Por exemplo, este ano é o segundo turno das eleições, em outros anos foi a visita do papa, e assim por diante.
O Java tem uma regra, o Windows tem outra, e o Linux tem outra ainda. A regra do Windows, para piorar, depende da versão do Windows porque a Microsoft tentou “correr atrás” de uma data adequada para a atualização (tipicamente segundo fim de semana de outubro). Mesma coisa com o Java, a Sun também tentou correr atrás de uma data adequada.

T

Por exemplo, o seguinte programa na minha máquina dá dois resultados diferentes (com o JDK 1.4.2_05 e com o JDK 1.5.0):

import java.util.*;

class Test129 {
    public static void main(String[] args) {
        System.out.println (new Date());
        TimeZone tz = TimeZone.getDefault();
        System.out.println (tz);
    }
}

Obs. O horário atual é 13:19 aproximadamente.

JDK 1.4.2_05:

Wed Oct 13 14:19:09 BRST 2004
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]]

JDK 1.5.0:

Wed Oct 13 13:18:16 BRT 2004
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=15,startDayOfWeek=1,startTime=0,startTimeMode=0,endMode=3,endMonth=1,endDay=15,endDayOfWeek=1,endTime=0,endTimeMode=0]]

Para o JDK 1.5.0 o horário de verão começa no primeiro fim de semana depois do dia 15, e para o JDK 1.4.2_05, no primeiro fim de semana depois do dia 8.
Para meu Windows Server 2003 a regra é "primeiro fim de semana depois do dia 15".

Acho interessante você ver o que dá para fazer com "TimeZone", mais especificamente com o método "setDefault".

Criado 13 de outubro de 2004
Ultima resposta 13 de out. de 2004
Respostas 2
Participantes 2