Subtraindo horas obtendo a diferença Java

Pessoal precisava subtrair horas no formato 00:00:00 e ter essa diferença achei uma porrada de artigos mas nada até agora alguém ? preciso de uma forma simples e funcional

Rápido, rasteiro e ligeiro.

DateTime start = new DateTime(2017, 06, 26, 9, 20, 0, 0);
DateTime end = new DateTime(2017, 06, 26, 10, 33, 0, 0);
Period period = new Period(start, end);
System.out.print(PeriodFormat.getDefault().print(period));
// 1 hour and 13 minutes

PS: as classes são da API do Joda Time.

raphael conseguir importar o jar Joda Timer mas estou com um erro no codigo que não consigo solucionar o erro esta em Period period = new Period(start, end);

ele diz que requer (int,int,int) dai puis , e um 0 mais ai vem outro erro diz que não pode converter DateTime em inteiro dai tento converter e nada

DateTime start = new DateTime(2017, 06, 26, 9, 20, 0, 0);
DateTime end = new DateTime(2017, 06, 26, 10, 33, 0, 0);

// period of 1 year and 7 days
Period period = new Period(start, end);

System.out.print(PeriodFormat.getDefault().print(period));
// 1 hour and 13 minutes

Você provavelmente importou java.time.Period ao invés de org.joda.time.Period

Só uma dica a mais, o construtor do DateTime aceita um Date ou um Calendar como argumento. Utilizei esse construtor só pra facilitar a manipulação da data.

Usando a nova API de tempo do Java 8:

import java.time.LocalTime;
import java.time.temporal.ChronoUnit;

public class Main {

    public static void main(String[] args) {
        String horario1 = "00:00:00";
        String horario2 = "05:03:48";
        // também tem outros construtores para utilizar números
        LocalTime lt1 = LocalTime.parse(horario1);
        LocalTime lt2 = LocalTime.parse(horario2);
        // diferenca
        long emHoras = lt1.until(lt2, ChronoUnit.HOURS);
        long emMinutos = lt1.until(lt2, ChronoUnit.MINUTES);
        long emSegundos = lt1.until(lt2, ChronoUnit.SECONDS);
        // etc
        System.out.println(emHoras);
        System.out.println(emMinutos);
        System.out.println(emSegundos);
    }
}
2 curtidas

Ivbarbosa estou recebendo um erro nessa linha

long emHoras = lt1.until(lt2, ChronoUnit.HOURS);
long emMinutos = lt1.until(lt2, ChronoUnit.MINUTES);
long emSegundos = lt1.until(lt2, ChronoUnit.SECONDS);

no ChronoUnit Cannot find symbol

Tá usando Java 8? Importou essa classe?

import java.time.temporal.ChronoUnit;

Então acredito que não tem o link de download ?

Qual JDK você tá utilizando? É só baixar o mais novo no site da Oracle.

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Se eu atualizar acho que meu Ireport para

Então tem que usar uma biblioteca como o Joda mesmo, como o @raphaeloneves disse.

Então Ivbarbosa estou baixando em outra maquina poderia me dizer como fazer outra coisa
preciso fazer uma especie de comparação
vou trabalhar com Hora Atual e Hora pedido
Preciso diminuir 20 minutos da Hora pedido

e preciso comparar

if(horaAtual > HoraPedido)
{
}

Nunca aprendi a usar a Joda time, sei fazer isso com a API nova do Java 8, pode ser?

import java.time.LocalTime;

public class Main {

    public static void main(String[] args) {
        LocalTime horaPedido = LocalTime.of(21, 10); // pedido feito às 21:10:00
        LocalTime horaAtual = LocalTime.now();
        // subtrair 20 minutos da hora do pedido:
        LocalTime horaPedidoSubtraida = horaPedido.minusMinutes(20);
        if (horaAtual.isAfter(horaPedidoSubtraida)) {
            // hora atual é depois da hora do pedido menos 20 min
        }
    }
}
1 curtida

Poise tbm não consegui usar ela tem muitas falhas se eu tiver em 00:58 e cair pra 1:00 ja da problema eu vou tentar aqui tinha tentado com After e Before mais n tava dando certo, depois que eu instalar o JDK ai ja vai estar a classe import java.time.LocalTime; automaticamente no netebeans ou tem mais algo

A biblioteca java.time já vem dentro do Java 8, não precisa se preocupar.

OK obrigado tava quebrando a cabeça ja aqui por mais que seja algo simples mais tem varios posts com assuntos vagos e nada da certo so esperando terminar de baixar e vou testar e te falo

Já instalei e ele continua com o erro quando começo a digitar ate tem as classes mas não deixa

Apaga os imports e deixa a IDE importar tudo de novo pra você. Tá dando conflito de nome de classe.

Ivbarbosa seu exemplo deu certo pra mim porem pra finalizar falta so mais uma coisa testando fora do render so no System.out.print ele esta entrando na opção certa de acordo com a hora se ela e menor ou maior que a atual ou que a do pedido menos 20 min mas dentro da classe do render n esta dando certo acredito que eu não estou usando a row corretamente ta ai o codigo

public class TableRenderer extends DefaultTableCellRenderer {

private void pegaLinhas()
{
    
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

    for (int i = 0; i < table.getRowCount(); i++) {
        
    
    String estado = table.getModel().getValueAt(row, 7).toString();

    System.out.print(estado+"\n");
    
    SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");

    Date data = new Date();
    String HoraAgora = format.format(data);
    
    String Horas    = estado.substring(0, 2);
    String Minutos  = estado.substring(3, 5);
    String Segundos = estado.substring(6, 8);

    int IntHoras    = Integer.parseInt(Horas);
    int IntMinutos  = Integer.parseInt(Minutos);
    int IntSegundos = Integer.parseInt(Segundos);

    //PegandoHoraAtual
    String AtualHoras    = HoraAgora.substring(0, 2);
    String AtualMinutos  = HoraAgora.substring(3, 5);
    String AtualSegundos = HoraAgora.substring(6, 8);

    int IntAtualHoras    = Integer.parseInt(AtualHoras);
    int IntAtualMinutos  = Integer.parseInt(AtualMinutos);
    int IntAtualSegundos = Integer.parseInt(AtualSegundos);

    LocalTime horaPedido = LocalTime.of(IntHoras, IntMinutos); // pedido feito às 21:10:00
    LocalTime horaAtual = LocalTime.of(IntAtualHoras,IntAtualMinutos);
    // subtrair 20 minutos da hora do pedido:
    LocalTime horaPedidoSubtraida = horaPedido.minusMinutes(20);
    
   
    
    if (horaAtual.isBefore(horaPedidoSubtraida)) {
        comp.setBackground(Color.GREEN);

        comp.setForeground(Color.BLACK);
    }

    if (horaAtual.isAfter(horaPedido)) {

        comp.setBackground(Color.RED);

        comp.setForeground(Color.BLACK);
    }

    if (horaAtual.isAfter(horaPedidoSubtraida)) {

        comp.setBackground(Color.YELLOW);

        comp.setForeground(Color.BLACK);

    }
  }
    return comp;
}

}