Soma de horas

17 respostas
A

E ai Pessoal, sou novato em java e me deparei com o seguinte problema:
Tenho:
hora1 = 20:00:00
hora2 = 15:00:00

Então preciso que hora1 + hora2 = 35:00:00, só que retorna 11:00:00.

Converti para String ai consegui fazer, só que estou exportando para excel e uso a API jxl então ele grava na célula como texto ai o usuário não consegue fazer cálculos.

Então se uso sheet.addCell(new Label(5, i, rgtCmc.getPermanencia())); no excel fica como texto
Se uso sheet.addCell(new DateTime(6, i, rgtCmc.getPermanencia(), horaFormat, true )); o valor fica 11:00:00

Alguém tem uma solução para isso?

Obrigado

17 Respostas

PedroMorragudo

Boa-tarde! Encontrei aqui no GUJ um assunto parecido falando sobre isto http://www.guj.com.br/java/39574-somar-horas
Vou procurar mais sobre este assunto

gasabi

Kara isso é easy…

Vc tem que converter tudo em segundos, para poder realizar o cálculo.

depois junta tudo e calcula a quantidade de horas, minutos e segundos…

E

O formato do Excel que permite visualizar “35 horas” em vez de “11 horas” tem um “[h]”. Mostramos um exemplo no attachment abaixo.

Atenção, não sei se isso funciona com o JXL :slight_smile:

PedroMorragudo

Valeu pessoal!

gasabi

Vou arruma um código aqui para vc prontinho… Guenta só 1 kado!

gasabi

Conseguiu resolver ?

A

O pessoal muito obrigado pelas dicas.

Então, ainda não, to quebrando a cabeça aqui, tentando fazer o que o pessoal esta falando, mas ainda não consegui.

Será que tem outra API melhor que a jxl para manipular excel?

Porque até consegui colocar o valor de 35:00:00 na célula mas o formato fica como texto.

PedroMorragudo

Peguei um exemplo em um site que soma a hora atual em 30 minutos automaticamente. To mexendo neste código para o usuário entrar com a hora para ser somada. Mais toda ajuda é bem vinda.

PedroMorragudo

link: http://pt.scribd.com/doc/50184575/exemplos-somar-horas

gasabi

Vê se isso ajuda…

Converte as horas em segundos e faz a soma.

String hora1 = ("20:00:00");
		
		// Trabalhando hora 1		
		
		String hh1 = hora1.charAt(0) +"" +hora1.charAt(1);
		String mm1 = hora1.charAt(3) +"" +hora1.charAt(4);
		String ss1 = hora1.charAt(6) +"" +hora1.charAt(7);
		
		Long totalseg1 = Long.parseLong(hh1) * 360 + Long.parseLong(mm1) * 60 + Long.parseLong(ss1);
		
		// Trabalhando hora 2
		
		String hora2 = ("15:00:00");
			
		String hh2 = hora2.charAt(0) +"" +hora2.charAt(1);
		String mm2 = hora2.charAt(3) +"" +hora2.charAt(4);
		String ss2 = hora2.charAt(6) +"" +hora2.charAt(7);
		
		Long totalseg2 = Long.parseLong(hh2) * 360 + Long.parseLong(mm2) * 60 + Long.parseLong(ss2);
		
		System.out.println(totalseg2);
		
		// Calculando a soma das horas 1 e 2
		
		Long totalfinalseg = (long) 0;
		
		totalfinalseg = totalseg1 + totalseg2;
		
		System.out.println(totalfinalseg);
PedroMorragudo

Entendo depois só converter de segundos para horas

diogocarvalho

Amigo tem uma API, que no meu ponto de vista é a melhor para trabalhar com Datas/Horas, que se chama JollyDay. Depois que descobrimos ela, melhorou e muito nosso desenvolvimento. Dê uma olhada

http://jollyday.sourceforge.net/

PedroMorragudo

To usando a ideia de orientação a objeto, reutilização de código lol. Estou mexendo no que postou para nós, falta tratar os erros e deixar ele mais legível

package main;

import java.util.Scanner;
public class Main2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Scanner dados = new Scanner(System.in);
		
		System.out.println("Digite o valor da hora 1");
		String a = dados.nextLine();
		
		String hora1 = (a);  
	      
	    // Trabalhando hora 1         
	      
	    String hh1 = hora1.charAt(0) +"" +hora1.charAt(1);  
	    String mm1 = hora1.charAt(3) +"" +hora1.charAt(4);  
	    String ss1 = hora1.charAt(6) +"" +hora1.charAt(7);  
	      
	    Long totalseg1 = Long.parseLong(hh1) * 360 + Long.parseLong(mm1) * 60 + Long.parseLong(ss1);  
	      
	    // Trabalhando hora 2  
	     
	    System.out.println("Digite hora 2");
	    String b = dados.nextLine();
	    String hora2 = (b);  //String hora2 = ("10:00:00");
	          
	    String hh2 = hora2.charAt(0) +"" +hora2.charAt(1);  
	    String mm2 = hora2.charAt(3) +"" +hora2.charAt(4);  
	    String ss2 = hora2.charAt(6) +"" +hora2.charAt(7);  
	      
	    Long totalseg2 = Long.parseLong(hh2) * 360 + Long.parseLong(mm2) * 60 + Long.parseLong(ss2);  
	      
	    System.out.println(totalseg2);  
	      
	    // Calculando a soma das horas 1 e 2  
	      
	    Long totalfinalseg = (long) 0;  
	      
	    totalfinalseg = totalseg1 + totalseg2;  
	      
	    System.out.println(totalfinalseg);  

	}

}
PedroMorragudo

Com tratamento de erros. Ainda falta colocar em pacotes diferentes senão fica procedural.

package main;

import java.util.Scanner;
public class Main2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Scanner dados = new Scanner(System.in);
		
		try{
			
		System.out.println("Digite o valor da hora 1 HH:mm:ss \n");
		String hora1 = dados.nextLine();  
	      
	    // Trabalhando hora 1         
	      
	    String hh1 = hora1.charAt(0) +"" +hora1.charAt(1);  
	    String mm1 = hora1.charAt(3) +"" +hora1.charAt(4);  
	    String ss1 = hora1.charAt(6) +"" +hora1.charAt(7);  
	      
	    Long totalseg1 = Long.parseLong(hh1) * 360 + Long.parseLong(mm1) * 60 + Long.parseLong(ss1);  
	      
	    // Trabalhando hora 2  
	     
	    System.out.println("Digite hora 2  HH:mm:ss \n");
	    String hora2 = (dados.nextLine());  //String hora2 = ("10:00:00");
	          
	    String hh2 = hora2.charAt(0) +"" +hora2.charAt(1);  
	    String mm2 = hora2.charAt(3) +"" +hora2.charAt(4);  
	    String ss2 = hora2.charAt(6) +"" +hora2.charAt(7);  
	      
	    Long totalseg2 = Long.parseLong(hh2) * 360 + Long.parseLong(mm2) * 60 + Long.parseLong(ss2);  
	      
	    System.out.println(totalseg2);  
	      
	    // Calculando a soma das horas 1 e 2  
	      
	    Long totalfinalseg = (long) 0;  
	      
	    totalfinalseg = totalseg1 + totalseg2;  
	      
	    System.out.println(totalfinalseg);  
		}catch(Exception erro){
			System.out.println("Erro! Dados inseridos não podem ser diferentes de HH:mm:ss \n" + erro.getMessage());
		}
	}
}
PedroMorragudo

Valeu diogocarvalho. Tô dando uma olhada sim e já importei para meu projeto. Tem como mostrar um exemplo de código usando este jar?

diogocarvalho

Tem sim amigo, aguarde só alguns minutos, vou procurar um projeto aqui no repositorio.

A

Pessoal, muito obrigado a todos pela ajuda… valew mesmo.

diogocarvalho, também gostaria de um exemplo com o jar, estou no aguardo obrigado.

Abraços galera

Criado 31 de agosto de 2012
Ultima resposta 3 de set. de 2012
Respostas 17
Participantes 5