Horas

Galera, preciso fazer uma função que me retorne em milissegundos quanto tempo falta para meia noite, como fazer o calculo ?? Usando meia noite como sendo 00:00. Não estou muito familiarizado com calendarios ainda, mas vejo que o caminho é por ai…

Bom dia!

Porque você não cria um objeto Calendar atribuindo dia de hoje somando mais 1, depois atribuindo hora, minuto e segundos com os valores 0.
Depois você cria um Date com a hora atual…
Depois é só subtrair o getTime de cada um e você terá a diferença

O caminho eh ± este.

/** * Retorna uma data com a soma das horas passados como parametro. * * @param date * @param hour * @return */ public static Date sumHours(Date date, int hour) { Calendar c1 = Calendar.getInstance(); c1.setTime(date); c1.add(Calendar.HOUR, hour); return c1.getTime(); }

Eu tinha ido por ai, mas minha pergunta é como crio um calendar com a hora sendo meia noite ??!!

Assim:

Calendar dataIni = new GregorianCalendar();
dataIni.set(Calendar.HOUR_OF_DAY, 0);  
dataIni.set(Calendar.MINUTE, 0); 	
dataIni.set(Calendar.SECOND, 0); 
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), 
                cal.get(Calendar.MONTH), 
                cal.get(Calendar.DAY_OF_MONTH ), 
                23, 
                59, 
                59);

Tenta dessa forma…

                // instancia o calendar que será usado pra alterarmos para meia noite
		Calendar calMeiaNoite = GregorianCalendar.getInstance();
		
		// recupera a data de hoje
		int day = calMeiaNoite.get(Calendar.DATE);
		
		// atribui no calendar a data de hoje +1
		calMeiaNoite.set(Calendar.DATE, day+1);
		
		// altera o horario para 00:00:00
		calMeiaNoite.set(Calendar.HOUR, 0);
		calMeiaNoite.set(Calendar.MINUTE, 0);
		calMeiaNoite.set(Calendar.SECOND, 0);
		calMeiaNoite.set(Calendar.MILLISECOND, 0);
		
		// recupera a data atual
		Date dataAtual = new Date();
		
		// calcula o resultado
		long resultado = calMeiaNoite.getTime().getTime()-dataAtual.getTime();
		
		// resultado em milisegundos
		System.out.println(resultado);
		
		// resultado em minutos
		System.out.println(resultado/(60*1000));

Valew consegui o que queria, obrigado a todos pelas dicas… :smiley: