Dúvida, como intervalo de horas e minutos com JodaTime. [Resolvido]

2 respostas
raptor.x

Boa tarde a todos.

Pessoal preciso criar um metodo que me retorne a qtde de horas em um intervalo de tempo em horas e minutos.
Seguindo as dicas do seguinte tópico: http://www.guj.com.br/java/99361-joda-time tenho o seguinte:

SimpleDateFormat df = new SimpleDateFormat("dd/mm/yyyy hh:mm");
Date entrada = df.parse("04/11/2011 08:35");
Date saida = df.parse("08/11/2011 15:00");

Hours tempo = Hours.hoursBetween(new DateTime(entrada), new DateTime(saida));
            
//Retorna um int contendo as horas da dif entre entrada e saida 
System.out.println(tempo.getHours());

O meu problema é que o metodo getHours() retorna um inteiro e eu precisava de um float. Por exemplo: 102.35horas (Equivalente a 102horas e 21minutos), para com este resultado multiplicar o valor da hora.
Por ex: 1,5h * 10,00 a hora = 15,00.

Tive dando uma olhada nas classe joda e encontrei esta:

LocalDateTime start = new LocalDateTime("2011/05/05 08:35"); LocalDateTime enD = new LocalDateTime("2011/06/05 15:00"); Period period = new Period(start, enD);
Sem sucesso!
Alguém pode me ajudar?

2 Respostas

diego.sas

raptor.x:
Boa tarde a todos.

Pessoal preciso criar um metodo que me retorne a qtde de horas em um intervalo de tempo em horas e minutos.
Seguindo as dicas do seguinte tópico: http://www.guj.com.br/java/99361-joda-time tenho o seguinte:

SimpleDateFormat df = new SimpleDateFormat("dd/mm/yyyy hh:mm");
Date entrada = df.parse("04/11/2011 08:35");
Date saida = df.parse("08/11/2011 15:00");

Hours tempo = Hours.hoursBetween(new DateTime(entrada), new DateTime(saida));
            
//Retorna um int contendo as horas da dif entre entrada e saida 
System.out.println(tempo.getHours());

O meu problema é que o metodo getHours() retorna um inteiro e eu precisava de um float. Por exemplo: 102.35horas (Equivalente a 102horas e 21minutos), para com este resultado multiplicar o valor da hora.
Por ex: 1,5h * 10,00 a hora = 15,00.

Tive dando uma olhada nas classe joda e encontrei esta:

LocalDateTime start = new LocalDateTime("2011/05/05 08:35"); LocalDateTime enD = new LocalDateTime("2011/06/05 15:00"); Period period = new Period(start, enD);
Sem sucesso!
Alguém pode me ajudar?

VOcê ja tentou criar uma classe que estenda Hours, sobrescrever o método getHours?

raptor.x

Bom dia a todos,

Pessoal, consegui encontrar uma solução relativamente simples. O Joda-Time possui um metodo que retorna a qtde total de minutos: getMinutes() Com isso ficou fácil resolver. Segue o algoritmo exemplo.
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.joda.time.DateTime;
import org.joda.time.Minutes;
/**
 * Contexto do Algoritimo: Estadia de veiculo num estacionamento
 * Função: Converter dois intervalos de tempo em minutos e calcular o valor da estadia
 * @param  n/a
 * @Return n/a
 * @author raptor
 */
public class CalculaTempo {
    public CalculaTempo()  {
        try {
            converter();
        } catch (ParseException ex) {
            Logger.getLogger(CalculaTempo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public void converter() throws ParseException {
        //Mascara dataHora
        SimpleDateFormat df = new SimpleDateFormat("dd/mm/yyyy hh:mm");
        //Criando entrada e saída em formato Date
        Date entrada = df.parse("07/11/2011 8:23");
        Date saida = df.parse("07/11/2011 11:07");

        //Criando entrada e saída em formato Timestamp
        Timestamp a= new Timestamp(entrada.getTime());
        Timestamp b= new Timestamp(saida.getTime());

        //recebendo dados a partir de um Timestamp
        Minutes min1 = Minutes.minutesBetween(new DateTime(a), new DateTime(b));
        //recebendo dados a partir de um Date
        Minutes min2 = Minutes.minutesBetween(new DateTime(entrada), new DateTime(saida));
        
        //Retorna um int contendo o intervalo em minutos
        System.out.println("Timestamp convertido: "+min1.getMinutes()); //Consegue trabalhar com Timestamp
        System.out.println("Date convertido: "+min2.getMinutes());      //Ou Date

        //Convertendo os minutos totais em um float que represente a qtde de horas
        float totalHoras = (float) min2.getMinutes()/60;  
        System.out.println(totalHoras);

        //Definindo o valor da hora
        float valorHora = (float) 1.65;

        //Calculando o valor sobre a qtde de tempo
        float valorTotal = totalHoras*valorHora;

        //Mostrando na tela
        System.out.printf("Total: = R$%.2f", valorTotal); 

    }
    public static void main(String args[]) {
        new CalculaTempo();
    }
}
Criado 8 de novembro de 2011
Ultima resposta 9 de nov. de 2011
Respostas 2
Participantes 2