Subtração de Hora

5 respostas
M

Estou tentando subtrair uma hora de outra. Porém, mesmo quando tento subtrair uma determinada hora dela mesma, o resultado dá 21:00:00.000
Como posso resolver este problema? Enfim, toda subracao que faço, acaba retornando algo do tipo 21:00:02.233.
Observe o resultado das duas variáveis diferenca e diferenca1:

public static void main(String[] args) {
        // Data inicial
        java.text.DateFormat dfo = new java.text.SimpleDateFormat("HH:mm:ss.SSS");
        Calendar dataInicio = Calendar.getInstance();

        for (int i = 0; i < 20000; i++) {
            System.out.println("teste");
        }

        // Data final
        Calendar dataFinal = Calendar.getInstance();
        //long df = System.currentTimeMillis();
        long diferenca = dataFinal.getTimeInMillis() - dataFinal.getTimeInMillis();
        long diferenca1 = dataFinal.getTimeInMillis() - dataInicio.getTimeInMillis();
        System.out.println("diferenca ---> " + diferenca);
        
        System.out.println("Diferenca: " + dfo.format(diferenca));
        System.out.println("Diferenca: " + dfo.format(diferenca1));
    }

Resultado:

diferenca ---> 0
Diferenca: 21:00:00.000
Diferenca: 21:00:02.148
CONSTRUÍDO COM SUCESSO (tempo total: 3 segundos)

5 Respostas

luistiagos

Por exemplo se vc quiser subtrair 2 horas da hora atual:

Calendar c = Calendar.getInstance();
c.add(Calendar.HOUR_OF_DAY, -2);
M

Na verdade estou querendo tirar a diferença entre um horário inicial e um horário final.
Esta diferença deve ser dada em hora:minuto:segundo.milessegundos.
Inclusive a diferença entre uma hora inicial e final poderá ser muito pequena, em fração de milessegundos em alguns casos.
Obrigado.

luistiagos

veja se isto te ajuda: http://joda-time.sourceforge.net/key_period.html

R

Cara acho q isso te ajuda :

public class DiferencaDeDatas {

    public static boolean validaDataUltimaModArquivo(final String caminhoArquivo, final int dataLimite) {
        File f = new File(caminhoArquivo);
        Calendar datadoArquivo = Calendar.getInstance();
        datadoArquivo.setTimeInMillis(f.lastModified());
        return validaDiferenca(Calendar.getInstance(), datadoArquivo, dataLimite);
    }

    public static boolean validaDiferenca(final Calendar dataFinal, final Calendar dataInicial, final int diasLimite) {

        int diferenca = dataFinal.get(Calendar.DAY_OF_YEAR) - dataInicial.get(Calendar.DAY_OF_YEAR);
        if (diferenca <= diasLimite) {
            return true;
        } else {
            return false;
        }
    }

Eh soh vc dar uma implementada, por exemplo, substituir as constantes DAY_OF_YEAR pelo que vc quer.
Espero ter ajudado

M

Solução do problema:

public static void main(String[] args) {
        // Data inicial
        java.text.DateFormat dfo = new java.text.SimpleDateFormat("HH:mm:ss.SSS");
        Calendar dataInicio = Calendar.getInstance();

        for (int i = 0; i &lt; 20000; i++) {
            System.out.println("teste");
        }

        // Data final
        Calendar dataFinal = Calendar.getInstance();
        //long df = System.currentTimeMillis();
        long diferenca = dataFinal.getTimeInMillis() - dataFinal.getTimeInMillis();
        long diferenca1 = dataFinal.getTimeInMillis() - dataInicio.getTimeInMillis();
        System.out.println("diferenca ---&gt; " + diferenca);
        //formato UTC do TimeZone - resolveu
        dfo.setTimeZone(TimeZone.getTimeZone("UTC"));

        System.out.println("Diferenca: " + dfo.format(diferenca));
        System.out.println("Diferenca: " + dfo.format(diferenca1));
    }
Criado 22 de maio de 2012
Ultima resposta 22 de mai. de 2012
Respostas 5
Participantes 3