Calculo de Horas

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 ?

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.

[quote=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.

[/quote]

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)

[code]/**
* Calcula a diferença de duas datas em minutos
*

* Importante: 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;
}[/code]

créditos by: jose_castilho

[quote=rafaduka][code]/**
* Calcula a diferença de duas datas em minutos
*

* Importante: 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;
}[/code]

créditos by: jose_castilho [/quote]

Uol. …

Muito Obrigado !

vou testar !

Valeu mesmo .

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

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

[/quote]

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 ?

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

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

pode ser mais claro?

[quote=rafaduka]realizei o teste no método e está funcionando! :roll:

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

pode ser mais claro?[/quote]

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. . =/

[quote=rafaduka]realizei o teste no método e está funcionando! :roll:

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

pode ser mais claro?[/quote]

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. . =/

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.

[quote=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.[/quote]

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);  
                }  

[code]/**
* Calcula a diferença de duas datas em minutos
*

* Importante: 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;  
}[/code]

vc usou?

[quote=rafaduka][code]/**
* Calcula a diferença de duas datas em minutos
*

* Importante: 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;  
}[/code]

vc usou?[/quote]

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 ?

Acredito que o problema está na hora, que vc tenta remover da Lista.

[code]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");
    
}

}
[/code]

[quote=rafaduka]Acredito que o problema está na hora, que vc tenta remover da Lista.

[code]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");
    
}

}
[/code][/quote]

Ah Muito Obrigado !

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

Obrigado .

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

Bom estudo :wink: