Subtrair Horas

10 respostas
I

Pessoal, estou um um problema aqui, já pesquisei bastante e não achei a solução.

Estou desenvolvendo um banco de horas.

preciso de um método que receba duas strings no formato HH:mm ex: 15:00 e subtraia a primeira pela segunda.

exemplos:

“180:00” - “230:00” = “- 50:00”
“130:00” - “47:32” = “82:28”
“00:10” - “14:30” = “- 14:20”

gostaria de saber a melhor forma de fazer isso, o retorno do método deve ser String também e com o sinal “-” caso negativo.

obrigado!

10 Respostas

renzonuccitelli

Não sei se já tem alguma coisa pronta, mas com certeza com o método split da classe String vc implementa isso rapidinho, isso se as horas se referirem a horas de um msm dia…

I
renzonuccitelli:
Não sei se já tem alguma coisa pronta, mas com certeza com o método split da classe String vc implementa isso rapidinho, isso se as horas se referirem a horas de um msm dia...
usei ele em alguns exemplos.. vou postar o metodo aqui... no caso de negativo está dando pala.. e esta gigante o metodo.. quero algo mais preciso. la vai metodo:
public String subtraiHora(String maior, String menor){
		
		String horaSubtraida;
		String sinal = "";
		
		//Periodo a ser somado  
	    String [] maiorHoraArray = maior.split(":");  
	    int hrMaior = Integer.parseInt(maiorHoraArray[0]);  
	    int minMaior = Integer.parseInt(maiorHoraArray[1]); 	  
	  
	    //Periodo a somar  
	    String [] menorHoraArray = menor.split(":");  
	    int hrMenor = Integer.parseInt(menorHoraArray[0]);  
	    int minMenor = Integer.parseInt(menorHoraArray[1]);  
	    
	    int horaFinal = hrMaior - hrMenor;
	    int minFinal = minMaior - minMenor;
	    
	   
	    
		    if(minFinal < 0){
		    	if(hrMaior > 0){
		    	horaFinal--;
		    	minFinal+=60;
		    	} else {
		    	minFinal *= -1;
		    	}
		    }	    
	    String horaFim = new Integer(horaFinal).toString();
	    String minFim = new Integer(minFinal).toString();
	    
	    if(horaFinal < 0){
	    	 if(horaFim.length()==2){
	 	    	horaFim = "-0" + horaFim.substring(1,2);
	 	    }	 	   
	    }
	    	    
	    if(horaFim.length()==1){
	    	horaFim = "0" + horaFim;
	    }
	    if(minFim.length()==1){
	    	minFim = "0" + minFim;
	    }
	    
	    horaSubtraida = horaFim + ":" + minFim;		
		 
      	return horaSubtraida;
	}
Felagund

Será que utilizando a classe Calendar não seria mais facil?

[]'s

I

Felagund:
Será que utilizando a classe Calendar não seria mais facil?

[]'s


o problema fica quando der negativa a subtração… ele para em zero(posso esta enganado).

T

A classe Calendar, como foi comentado, é inadequada para formatar diferença entre duas datas.

I

me sugere alguma classe Thingol?

T

Você pode usar o Joda-Time ( http://joda-time.sourceforge.net/ )

I
thingol:
Você pode usar o Joda-Time ( http://joda-time.sourceforge.net/ )
Uso ele no metodo de somar! segue ae pro pessol la vai metodo!!!!
public String somaHora(String hora1, String hora2) {  
	    //Periodo a ser somado  
	    String [] arraySomado = hora1.split(":");  
	    int h = Integer.parseInt(arraySomado[0]);  
	    int m = Integer.parseInt(arraySomado[1]);  
	    Period somado = new Period(h, m, 0, 0);  
	  
	    //Periodo a somar  
	    String [] arraySoma = hora2.split(":");  
	    int h2 = Integer.parseInt(arraySoma[0]);  
	    int m2 = Integer.parseInt(arraySoma[1]);  
	    Period soma = new Period(h2, m2, 0, 0);  
	  
	  
	    //Soma  
	    somado = somado.plus(soma);  	    
	  
	    //Normaliza  
	    somado = somado.normalizedStandard(PeriodType.time());   
	  
	    //Formata  
	    PeriodFormatter pf = new PeriodFormatterBuilder()  
	    .printZeroAlways()  
	    .minimumPrintedDigits(2)  
	    .appendHours()    
	    .appendSeparator(":")    
	    .appendMinutes()   
	    .toFormatter();  
	  
	    return somado.toString(pf);  
	}

para subtrair não achei nenhum metodo do joda.
Help...

T

Period.minus

I
thingol:
Period.minus

Boaaa 06!

mais simples do que eu imaginava, modifiquei o metodo que eu usava para somar.. o resultado foi perfeito.
ele ja retorna com o sinal de negativo...

toma-le metodo! espero que isso ajude outros perdidos!! XD
public String subtrai(String hora1, String hora2) {  
	    //Primeiro Periodo
	    String [] arrayFirst = hora1.split(":");  
	    int h = Integer.parseInt(arrayFirst[0]);  
	    int m = Integer.parseInt(arrayFirst[1]);  
	    Period primeiro = new Period(h, m, 0, 0);  
	  
	    //Segundo Periodo
	    String [] arraySecond = hora2.split(":");  
	    int h2 = Integer.parseInt(arraySecond[0]);  
	    int m2 = Integer.parseInt(arraySecond[1]);  
	    Period segundo = new Period(h2, m2, 0, 0);  
	  
	  
	    //Executando Subtração
	    primeiro = primeiro.minus(segundo);  	    
	  
	    //Normaliza  
	    primeiro = primeiro.normalizedStandard(PeriodType.time());   
	  
	    //Formata  
	    PeriodFormatter pf = new PeriodFormatterBuilder()  
	    .printZeroAlways()  
	    .minimumPrintedDigits(2)  
	    .appendHours()    
	    .appendSeparator(":")    
	    .appendMinutes()   
	    .toFormatter();  
	  
	    return primeiro.toString(pf);  
	}
vlw Thingol!
Criado 25 de março de 2009
Ultima resposta 25 de mar. de 2009
Respostas 10
Participantes 4