Setar "Meia-noite" em um objeto do tipo Date

7 respostas
mateusviccari

Bom dia, não estou conseguindo de forma alguma setar a hora de uma determinada Date como 00:00, ele sempre fica como 01:00
O meu codigo está assim:

Date d=new SimpleDateFormat("dd/MM/yyyy").parse("21/10/2012"); GregorianCalendar c=new GregorianCalendar(); c.setTime(d); c.set(Calendar.HOUR_OF_DAY, 0); d=new Date(c.getTimeInMillis()); java.sql.Date dd=new java.sql.Date(c.getTimeInMillis()); System.out.println(d);
O gregorian calendar até chega a ficar com a hora 0, mas quando boto o valor de volta pra data ele fica com a hora 1.
Alguem tem a solução pra isso?

7 Respostas

igor_ks

Humm, por essa data ae, parece q tem algo a ver com horario de verão,

se vc colocar outra data 10/01/2012 por exemplo, ele consegue ficar no meia noite né?

mateusviccari

Sim!
Setando esta data ele fica com a hora = 0
Existe alguma forma de considerar o horario de verão usando a classe Date ou Calendar?

igor_ks

Estranho, executei esse codigo seu e trouxe meia noite mesmo…

mas de qualquer forma, tenta isso:

http://www.guj.com.br/java/71816-problema-com-horario-de-verao

mateusviccari

Estou enfrentando esse problema em alguns clientes desde o dia 21, que foi quando começou o horario de verão…
Encontrei um[color=yellow]a gambiarra[/color] código na internet que informa a jvm sobre as regras do horario de verão:

TimeZone.setDefault( new SimpleTimeZone( TimeZone.getDefault().getRawOffset(), "America/Sao_Paulo", Calendar.OCTOBER, //mes de inicio 21, //dia de inicio 0, 3600000*1+60000*0, // hora de inicio Calendar.FEBRUARY,//mes de fim 17, //dia de fim 0, 3600000*2+60000*0, // hora de fim 3600000));
Assim aparentemente funcionou, esta mostrando a hora certa… Mas não sei se esse é o jeito certo de tratar isso, ou se vai me trazer mais problemas mais pra frente.

igor_ks

Ueh, mas se timezone SaoPaulo, que dizer que os clientes sao brasileiros certo?

Aqui no Brasil nao tivemos o horario de 00:00 a 01:00 desse dia…

mateusviccari

igor_ks:
Ueh, mas se timezone SaoPaulo, que dizer que os clientes sao brasileiros certo?

Aqui no Brasil nao tivemos o horario de 00:00 a 01:00 desse dia…


Na verdade não sei qual foi a hora que iniciou, então deixei essa hora mesmo, mas foi nesse dia 21/10 e vai terminar dia 17/02.

D
Calendar calendar = Calendar.getInstance();  
	        
	    calendar.set(Calendar.DAY_OF_MONTH,   dia);  
	    calendar.set(Calendar.MONTH, mes);  
	    calendar.set(Calendar.YEAR, ano);  
	    calendar.set(Calendar.HOUR_OF_DAY, 0);
	    calendar.set(Calendar.MINUTE, 0);
	    calendar.set(Calendar.SECOND, 0);
	    calendar.set(Calendar.MILLISECOND, 0);
	    
	    Date periodoInicial = calendar.getTime();
Criado 26 de outubro de 2012
Ultima resposta 26 de out. de 2012
Respostas 7
Participantes 3