Problemas com o Date

Olá Senhores

Gostaria de saber se alguem já passou pelo problema com a data “2003-10-12 00:00:00” na VM 1.3.1 da sun. Quando eu seto um calendar com esta data(acontece com algumas outras tb) e depois faço um getTime() ele me retorna “2003-10-11 23:00:00” … O dia vai de 12 para 11.

Segue uma classe de teste:

import java.util.*;
public class TesteVM
{
    public static void main(String[] args) throws Exception
    {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, 2003);
        cal.set(Calendar.MONTH, 9);
        cal.set(Calendar.DAY_OF_MONTH, 12);
        cal.set(Calendar.HOUR, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        System.out.println(cal.getTime().toString());
    }
}

a saida pro codigo acima :

Sat Oct 11 23:00:00 BRT 2003

Fato curioso nº 1: Com a vm 1.4 nao dá problema, pra qq data :slight_smile:
Fato curioso nº 2: Mudando o ano (ex: 2004) não dá problema :o
Fato curioso nº 3: Mudando a hora (ex: 1) não dá problema :smiley:

Minhas suspeitas recaem sobre TimeZone ou alguma configuração de horário de verão mas gostaria de ver com alguem que já passou por algo parecido.

Fato Foker nº 4: Preciso usar a vm 1.3 :shock:

Alguem conhece o problema e poderia explicá-lo ?

Valeu

Desculpe pelo comentário absolutamente inútil, mas aconselho recorer à cabala.

http://vidanova.terra.com.br/testes/cabala/entrada.asp

Isso é coisa do horário de verão. Se você for ver direitinho no seu ambiente (se não me engano o Java pega a configuração do Windows mesmo!), ele deve estar achando que o horário de verão sempre começa no segundo domingo de outubro, aqui no Brasil. Obviamente isso é uma grande bobagem porque se o Papa for visitar a gente de novo, vão atrasar o início do horário de verão de novo…

Para saber exatamente em que dia o seu Windows (ou Solaris, eu não sei que ambiente você está usando) vai mudar o horário de verão, é preciso usar uma ferramenta que olha o registry chamada “timezone” e que você pode obter no MSDN (Windows Resource Kits).

Na minha máquina Windows 2003 Server:

timezone /g

Current Timezone is :

Daylight Saving Time begins at 02:0:3:10
Daylight Saving Time ends at 02:0:2:02

Isso quer dizer, em português:
O horário de verão começa às 02 horas do domingo (0), no terceiro (3) domingo, do mês outubro (10).
O horário de verão finaliza às 02 horas do domingo (0), no segundo (2) domingo, do mês fevereiro (2).

Na minha máquina ele acha que começa no terceiro domingo de outubro, e na sua acabou acontecendo que começa no segundo domingo de outubro. Que coisa…

É isso mesmo Tingol. O lance é por causa do horário de verão. Pra resolver isso basta usar um timezone que não tenha o maldito horário de verão, por exemplo o da Argentina que eh GMT-3 como o nosso.

Pra testes no windows, é só mudar o fuso no reloginho.

Falow

Jah tive o mesmo problema Mediocore…o foda na época foi descobrir q o erro não era meu…huahauh