Calcular diferenças entre horas

6 respostas
janjan

meu metodo é esse

public static void main(String[] args) {
        try {
            Calendar data = Calendar.getInstance();

            long ini = data.getTimeInMillis();

            Thread.sleep(100 * 60);
            Calendar data2 = Calendar.getInstance();
            long fim = data2.getTimeInMillis();

            System.out.println("resultado da subtração é: " + (fim - ini));

            SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");

            System.out.println(fim + " - " + ini);

            System.out.println(sdf.format(fim) + " - " + sdf.format(ini));

            System.out.println("formatado: " + sdf.format((fim - ini)));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

e a saída da diferença é

09:00:06

mas quero que saia somente
00:00:06

oque me sugerem....
abraços

6 Respostas

janjan

resolvido dessa maneira

public static void main(String[] args) throws Exception {

	try {
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss.S");
			long start = Calendar.getInstance().getTimeInMillis();

			Thread.sleep(1000 * 5);

			long stop = Calendar.getInstance().getTimeInMillis();

			long time = stop - start;

			Calendar cal = Calendar.getInstance();

			cal.set(Calendar.HOUR_OF_DAY, 0);
			cal.set(Calendar.MINUTE, 0);
			cal.set(Calendar.SECOND, 0);
			cal.set(Calendar.MILLISECOND, 0);

			cal.add(Calendar.SECOND, Integer.parseInt("" + (time / 1000)));

			java.lang.System.out.println("HORA CERTA: " + sdf.format(cal.getTime()));
		} catch (Exception e) {

		}

	}
vlw
Naruffy

Pensando numa maneira simples de realizar isso seria criar um novo SimpleDateFormat com um pattern de apenas os segundos para formatar apenas o resultado

public static void main(String[] args) {
        try {
            Calendar data = Calendar.getInstance();

            long ini = data.getTimeInMillis();

            Thread.sleep(100 * 60);
            Calendar data2 = Calendar.getInstance();
            long fim = data2.getTimeInMillis();

            System.out.println("resultado da subtração é: " + (fim - ini));

            SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
            SimpleDateFormat sdfResultado = new SimpleDateFormat("ss");

            System.out.println(fim + " - " + ini);

            System.out.println(sdf.format(fim) + " - " + sdf.format(ini));

            System.out.println("formatado: " + sdfResultado .format((fim - ini)));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Eu só não entendi o porque que a saída é essa

08:29:25 - 08:29:19
formatado: 09:00:06

porque 08:29:25 - 08:29:19 devia ser 00:00:06 e não 09:00:06 oO

[]s

janjan

voce viu que eu seto um calendar com as datas zeradas na maneira qeu eu disse que deu certo…
é por que o calendario nao do java nao é 100% “redondinho” tem suas imperfeições eu acredito.
entao depois que eu zero ele funciona
mas e não me adiantaria ter somente os minutos
pois o sleep nunca sera o mesmo
pode aumentar e tenho que calcular horas e minutos
blz!

M

Ou voc pode usar esta formatação:

DateFormat df = DateFormat.getTimeInstance(DateFormat.MEDIUM);
 	df.setTimeZone(TimeZone.getTimeZone("GMT"));
O

http://www.guj.com.br/posts/list/119055.java#645284

A

Que estranho isso…

Criado 21 de maio de 2009
Ultima resposta 20 de jun. de 2009
Respostas 6
Participantes 5