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
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
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.
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.