Calculo de Horas

16 respostas
G

Olá,

tenho duas entradas
entrada do Ts e entrada do Bt,
e queria calcular a diferença entre elas.

minhas entradaTs é String
e minhas entradaBt é Date .

como posso fazer isso ?

16 Respostas

rafaduka

que tipo de diferença?

  • Qual é a maior?

  • Diferença de dias?

  • Diferença de anos?

  • Diferença de horas?

  • Dúvida em como converter String em Date?

ajude-me a ti ajudar.

G

rafaduka:
que tipo de diferença?

  • Qual é a maior?

  • Diferença de dias?

  • Diferença de anos?

  • Diferença de horas?

  • Dúvida em como converter String em Date?

ajude-me a ti ajudar.

então é assim preciso saber a diferença e, minutos…

por exemplo …
SaidaTs = 13:31
SaidaBt = 13:35

diferenca seria 04 min certos.

então estou tentando fazer tudo como Date…usando o SimpleDateFormat (HH:mm)

rafaduka
/**
	 * Calcula a diferença de duas datas em minutos
	 * <br>
	 * <b>Importante:</b> Quando realiza a diferença em minutos entre duas datas, este método considera os segundos restantes e os converte em fração de minutos.
	 * @param dataInicial
	 * @param dataFinal
	 * @return quantidade de minutos existentes entre a dataInicial e dataFinal.
	 */
	public static double diferencaEmMinutos(Date dataInicial, Date dataFinal){
		double result = 0;
		long diferenca = dataFinal.getTime() - dataInicial.getTime();
		double diferencaEmMinutos = (diferenca /1000) / 60; //resultado é diferença entre as datas em minutos
		long segundosRestantes = (diferenca / 1000)%60; //calcula os segundos restantes
		result = diferencaEmMinutos + (segundosRestantes /60d); //transforma os segundos restantes em minutos
	
		return result;
	}

créditos by: jose_castilho

G
rafaduka:
/**
	 * Calcula a diferença de duas datas em minutos
	 * <br>
	 * <b>Importante:</b> Quando realiza a diferença em minutos entre duas datas, este método considera os segundos restantes e os converte em fração de minutos.
	 * @param dataInicial
	 * @param dataFinal
	 * @return quantidade de minutos existentes entre a dataInicial e dataFinal.
	 */
	public static double diferencaEmMinutos(Date dataInicial, Date dataFinal){
		double result = 0;
		long diferenca = dataFinal.getTime() - dataInicial.getTime();
		double diferencaEmMinutos = (diferenca /1000) / 60; //resultado é diferença entre as datas em minutos
		long segundosRestantes = (diferenca / 1000)%60; //calcula os segundos restantes
		result = diferencaEmMinutos + (segundosRestantes /60d); //transforma os segundos restantes em minutos
	
		return result;
	}

créditos by: jose_castilho

Uol. ..

Muito Obrigado !

vou testar !

Valeu mesmo .

rafaduka

Por favor edite o título e insira [RESOLVIDO]

G

rafaduka:
Por favor edite o título e insira [RESOLVIDO]

Não deu certo o que você me passou ontem . .
minha lista gerava em branco …

então fiz assim

if (comp.getEntradaTS() != null && comp.getEntradaBio() != null) {
                SimpleDateFormat df = new SimpleDateFormat("HH:mm");
                entTs = df.parse(comp.getEntradaTS());
                entBt = comp.getEntradaBio();
                diferenca = new Date(entTs.getTime() - entBt.getTime());
                diferencaEnt = diferenca.getMinutes();
            }
if (comp.getSaidaTS() != null && comp.getSaidaBio() != null) {
                SimpleDateFormat df = new SimpleDateFormat("HH:mm");
                saiTs = df.parse(comp.getSaidaTS());
                saiBt = comp.getSaidaBio();
                diferenca = new Date(saiTs.getTime() - saiBt.getTime());
                diferencaSai = diferenca.getMinutes();
            }
if ((diferencaEnt <= 5) && (diferencaSai <= 5)) {
                listComp.remove(comp);
            }

só que ele está calculando errado …
tem campos que ele tinha que exibir e não exibe…
e outros que não tinha que exibir e ele exibe --’ . .

Pode me ajudar ?

rafaduka

realizei o teste no método e está funcionando! :roll:

tem campos que ele tinha que exibir e não exibe…
e outros que não tinha que exibir e ele exibe --’ . .

pode ser mais claro?

G

rafaduka:
realizei o teste no método e está funcionando! :roll:

tem campos que ele tinha que exibir e não exibe…
e outros que não tinha que exibir e ele exibe --’ . .

pode ser mais claro?

assim, na minha lista tenho as vezes entrada e saidas do TS nulos.
exemplo:

codigo          data            Entrada TS   Entrada Bt      Saida Ts       Saida Bt
1392	       03/01/2012	        null	         08:42             null	        10:38
1392	       04/01/2012     	null	         12:00             null	        12:00
1392	       05/01/2012	        null	         09:19	      null	        16:56

e está certo, porque nesse caso ele não preenche o TS. é automático.
então eu preciso que ele exiba essas linhas…
porque nesse caso não tem que fazer a conta…
apenas exibir…

agora esse daqui :

codigo          data            Entrada TS   Entrada Bt      Saida Ts       Saida Bt
2060	        04/01/2012	07:33	  07:33	      18:31	        18:34

está vendo a diferenca de uma saida com outra, é menor que 5 min.
mas ele exibe . e não deveria exibir. . =/

G

rafaduka:
realizei o teste no método e está funcionando! :roll:

tem campos que ele tinha que exibir e não exibe…
e outros que não tinha que exibir e ele exibe --’ . .

pode ser mais claro?

assim, na minha lista tenho as vezes entrada e saidas do TS nulos.
exemplo:

codigo          data            Entrada TS   Entrada Bt      Saida Ts       Saida Bt
1392	       03/01/2012	        null	         08:42             null	        10:38
1392	       04/01/2012     	null	         12:00             null	        12:00
1392	       05/01/2012	        null	         09:19	      null	        16:56

e está certo, porque nesse caso ele não preenche o TS. é automático.
então eu preciso que ele exiba essas linhas…
porque nesse caso não tem que fazer a conta…
apenas exibir…

agora esse daqui :

codigo          data            Entrada TS   Entrada Bt      Saida Ts       Saida Bt
2060	        04/01/2012	07:33	  07:33	      18:31	        18:34

está vendo a diferenca de uma saida com outra, é menor que 5 min.
mas ele exibe . e não deveria exibir. . =/

rafaduka

Esse trecho, remove da lista os itens que estão no limite de 5.

if ((diferencaEnt <= 5) && (diferencaSai <= 5)) { listComp.remove(comp); }

como vc está passando os valores para o método que retorna os minutos? os argumentos são do tipo Date.

já testou passando 2 datas? A diferença retorna como um double.

G

rafaduka:
Esse trecho, remove da lista os itens que estão no limite de 5.

if ((diferencaEnt <= 5) && (diferencaSai <= 5)) { listComp.remove(comp); }

como vc está passando os valores para o método que retorna os minutos? os argumentos são do tipo Date.

já testou passando 2 datas? A diferença retorna como um double.

como assim passar duas datas ??

Desculpa esqueci de te informar isso.

está assim

Date diferenca, entTs, entBt, saiTs, saiBt;
        int diferencaEnt = 0, diferencaSai = 0;

    if (comp.getEntradaTS() != null && comp.getEntradaBio() != null) {  
                    SimpleDateFormat df = new SimpleDateFormat("HH:mm");  
                    entTs = df.parse(comp.getEntradaTS());  // Aqui converto pra date pq meu EntradaTS é String
                    entBt = comp.getEntradaBio();               // Aqui é Date direto .. 
                    diferenca = new Date(entTs.getTime() - entBt.getTime());  
                    diferencaEnt = diferenca.getMinutes();  
                }  
    if (comp.getSaidaTS() != null && comp.getSaidaBio() != null) {  
                    SimpleDateFormat df = new SimpleDateFormat("HH:mm");  
                    saiTs = df.parse(comp.getSaidaTS());  //Aqui converto pra date pq meu SaidaTS é String
                    saiBt = comp.getSaidaBio();               //Aqui ja e date
                    diferenca = new Date(saiTs.getTime() - saiBt.getTime());  
                    diferencaSai = diferenca.getMinutes();  
                }  
    if ((diferencaEnt <= 5) && (diferencaSai <= 5)) {  
                    listComp.remove(comp);  
                }
rafaduka
/** 
     * Calcula a diferença de duas datas em minutos 
     * <br> 
     * <b>Importante:</b> Quando realiza a diferença em minutos entre duas datas, este método considera os segundos restantes e os converte em fração de minutos. 
     * @param dataInicial 
     * @param dataFinal 
     * @return quantidade de minutos existentes entre a dataInicial e dataFinal. 
     */  
    public static double diferencaEmMinutos(Date dataInicial, Date dataFinal){  
        double result = 0;  
        long diferenca = dataFinal.getTime() - dataInicial.getTime();  
        double diferencaEmMinutos = (diferenca /1000) / 60; //resultado é diferença entre as datas em minutos  
        long segundosRestantes = (diferenca / 1000)%60; //calcula os segundos restantes  
        result = diferencaEmMinutos + (segundosRestantes /60d); //transforma os segundos restantes em minutos  
      
        return result;  
    }

vc usou?

G
rafaduka:
/** 
     * Calcula a diferença de duas datas em minutos 
     * <br> 
     * <b>Importante:</b> Quando realiza a diferença em minutos entre duas datas, este método considera os segundos restantes e os converte em fração de minutos. 
     * @param dataInicial 
     * @param dataFinal 
     * @return quantidade de minutos existentes entre a dataInicial e dataFinal. 
     */  
    public static double diferencaEmMinutos(Date dataInicial, Date dataFinal){  
        double result = 0;  
        long diferenca = dataFinal.getTime() - dataInicial.getTime();  
        double diferencaEmMinutos = (diferenca /1000) / 60; //resultado é diferença entre as datas em minutos  
        long segundosRestantes = (diferenca / 1000)%60; //calcula os segundos restantes  
        result = diferencaEmMinutos + (segundosRestantes /60d); //transforma os segundos restantes em minutos  
      
        return result;  
    }

vc usou?

então tentei usar esse dai ..

ai não deu certo..

então acabei tentando aquele ali ..
e deu meio certo . rs.

mas não tentei usar os "dois juntos".. ajustá-los.

você achá que da certo ?

rafaduka
Acredito que o problema está na hora, que vc tenta remover da Lista.
package br.com.teste

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Teste {
	
	public static void main(String[] args) throws ParseException {
		String entrada = "18:31";
		String saida = "18:34";
		
		Date entradaData = null;
		Date saidaData = null;
		
		final Integer LIMITE_MINUTO = 5;
		
		SimpleDateFormat dfEntrada = new SimpleDateFormat("HH:mm");  
        entradaData = dfEntrada.parse(entrada);
        
        SimpleDateFormat dfSaida = new SimpleDateFormat("HH:mm");  
        saidaData = dfSaida.parse(saida);
        
        long min = saidaData.getTime() - entradaData.getTime();
        
        Integer resultado = (int) ((min / 1000)/60);
        
        System.out.println("Diferença: " + resultado + " minuto(s)");
        
        boolean isDifference = (resultado <= LIMITE_MINUTO);
        
        System.out.println(isDifference ? "REMOVER" : "NÂO REMOVER");
        
	}
	
}
G
rafaduka:
Acredito que o problema está na hora, que vc tenta remover da Lista.
package br.com.cleartech;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Teste {
	
	public static void main(String[] args) throws ParseException {
		String entrada = "18:31";
		String saida = "18:34";
		
		Date entradaData = null;
		Date saidaData = null;
		
		final Integer LIMITE_MINUTO = 5;
		
		SimpleDateFormat dfEntrada = new SimpleDateFormat("HH:mm");  
        entradaData = dfEntrada.parse(entrada);
        
        SimpleDateFormat dfSaida = new SimpleDateFormat("HH:mm");  
        saidaData = dfSaida.parse(saida);
        
        long min = saidaData.getTime() - entradaData.getTime();
        
        Integer resultado = (int) ((min / 1000)/60);
        
        System.out.println("Diferença: " + resultado + " minuto(s)");
        
        boolean isDifference = (resultado <= LIMITE_MINUTO);
        
        System.out.println(isDifference ? "REMOVER" : "NÂO REMOVER");
        
	}
	
}

Ah Muito Obrigado !

vou analisar e ve se posso fazer de uma maneira diferente .

Obrigado .

emanuelCruz

Aceita um conselho ? Seria bom você estudar lógica de programação…

Bom estudo :wink:

Criado 22 de março de 2012
Ultima resposta 23 de mar. de 2012
Respostas 16
Participantes 3