Classe para calcular Horas

14 respostas
Vitoriano

Olá, estou fazendo um sistema semelhante de LAN House, que irá calcular a hora gasto.
A lógica está na classe abaixo, mas não lembro como fazer esse calculo.. :?:

/**
 *
 * @author Vitoriano
 */
class CalculaHora {

    public CalculaHora() {
        int a;
        int b;
        int c;
        int d;
        int e;
        e = (((a-c)*8)+(b+d))
               
    }
    
}

a = dia inicial (DATE)
b = hora inicial (TIME)
c = dia final (DATE)
d = hora final (TIME)
8 ==> Horas de serviço em um dia
e = resultado em horas (00:00 HH:MM)

E os dados vão ser inseridos por um jTextField ou jFormattedTextField em uma interfaço GUI.
(a principio, preciso da logica para fazer isso na classe, em relação a GUI, vou criar um forum posterior na área especifica)

14 Respostas

MarcioCasteloBranco

Vitoriano trabalha com long no lugar do int.

leonardobhbr

Aconselho vc usar a JodaTime ou de uma olhada na JSR310 se eu não me engano da pra baixar o jar dela e adicionar na sua aplicação

F

java.util.Date

fabiomedeirosf

Procure pela classe Calendar.

Ela tem métodos fáceis para usar, e te suprirá todas as necessidades quanto a data/hora.

tiora

A sua logica tem dois erros :
1º Voce deve fazer dia final menos dia inicial.
2º Hora final menos a hora inicial.

Observação:
Lembrando que na troca de mês daria uma falha na questão dia.
O certo é fazer dia final menos dia inicial em módulo para ter resultado sempre positivo.

Vitoriano
tiora:
A sua logica tem dois erros : 1º Voce deve fazer dia final menos dia inicial. 2º Hora final menos a hora inicial.

Observação:
Lembrando que na troca de mês daria uma falha na questão dia.
O certo é fazer dia final menos dia inicial em módulo para ter resultado sempre positivo.

Tinha reparado isso mesmo, só esqueci de mudar aqui.. Obrigado

/** 
* 
* @author Vitoriano 
*/  
class CalculaHora {  
  
    public CalculaHora() {  
        long a;  
        long b;  
        long c;  
        long d;  
        long e;  
        e = (((c-a)*8)+(d-b))  
                 
    }  
      
}

Referente ao que usar, qual o melhor?

Calendar :?:
java.util.Date :?:
JodaTime :?:
:idea:

Vitoriano
Vitoriano:

Tinha reparado isso mesmo, só esqueci de mudar aqui.. Obrigado

/** 
* 
* @author Vitoriano 
*/  
class CalculaHora {  
  
    public CalculaHora() {  
        long a;  
        long b;  
        long c;  
        long d;  
        long e;  
        e = (((c-a)*8)+(d-b))  
                 
    }  
      
}

Referente ao que usar, qual o melhor?

Calendar :?:
java.util.Date :?:
JodaTime :?:
:idea:

Alguém? Li um pouco de cada, mas não "vi" qual melhor..

nel

Oi!

Se conhece a API Calendar, podes usa-la.
Agora evite ao máximo trabalhar com o java.util.Date, métodos como getHour() são depreciados, justamente porque existe o Calendar para tal.

O JodaTime é uma API que disponibilizaram para aqueles que não querem utilizar o Calendar ou por facilidades oferecidas pela própria API que evitam muita manipulação em cima do objeto Calendar.

Garanto que o Calendar vai resolver o teu problema.
Abraços.

Vitoriano

nel:
Oi!

Se conhece a API Calendar, podes usa-la.
Agora evite ao máximo trabalhar com o java.util.Date, métodos como getHour() são depreciados, justamente porque existe o Calendar para tal.

O JodaTime é uma API que disponibilizaram para aqueles que não querem utilizar o Calendar ou por facilidades oferecidas pela própria API que evitam muita manipulação em cima do objeto Calendar.

Garanto que o Calendar vai resolver o teu problema.
Abraços.


Obrigado!! :idea:

nel

De nada!

Só uma observação, creio que o JodaTime ofereça maior facilidade para manipulação :slight_smile:
Uma brincadeira com o JodaTime:

public static void main(String[] args) throws MessagingException {
		DateTime initialTime = new DateTime(new Date().getTime());
		Calendar c = Calendar.getInstance();
		c.add(Calendar.HOUR, 3);
		c.add(Calendar.MINUTE, 18);
		c.add(Calendar.SECOND, 22);
		DateTime finalTime = new DateTime(c.getTimeInMillis());
		Hours hours = Hours.hoursBetween(initialTime, finalTime);
		Minutes min = Minutes.minutesBetween(initialTime, finalTime);
		Seconds sec = Seconds.secondsBetween(initialTime, finalTime);
		
		System.out.println("Hours: " + hours.getHours());
		System.out.println("Minutos: " + min.getMinutes());
		System.out.println("Segundos: " + sec.getSeconds());
		
		Period period = new Period(initialTime, finalTime);
		System.out.println("Periodo: " + period.getHours());
	}

É só pesquisar mais se tiver interesse no JodaTime.
Abraços.

Vitoriano

nel:
De nada!

Só uma observação, creio que o JodaTime ofereça maior facilidade para manipulação :slight_smile:

É só pesquisar mais se tiver interesse no JodaTime.
Abraços.

Ok, estou pesquisando… Mas por exemplo, eu vou adicionar a API dele no NetBeans (ou eclipse) como o BIN do JDBC? Copiando para Libary :?:
(desculpa pergunta, mas sou meio leigo ainda em algumas coisas)

Estou pesquisando, e achando umas coisas legais… :smiley:

Vitoriano

Nel, já ouviu falar no Google Calendar APIs and Tools?
É bom? Ou novo e não esta estável?

nel

Vitoriano:
Nel, já ouviu falar no Google Calendar APIs and Tools?
É bom? Ou novo e não esta estável?

Infelizmente eu não sei lhe informar, pois eu já ouvi falar, mas sabe naquelas conversas de corredor?
Como nunca usei, para nada, não tenho opinião formada sobre esta API, mas me parece interessante.

Uma recomendação é evitar pesquisar tanto e ser mais objetivo, caso seu tempo seja reduzido.
Se possui tempo para pesquisar e estudar estas APIs, continue, teste cada uma delas, a JodaTime e a do Google, assim, poderás tirar tuas conclusões. :smiley:

Abraços!

Fexx

Assim como disse o nel, também acho que o JodaTime ofereça facilidade para manipulação,

Criado 14 de julho de 2011
Ultima resposta 19 de jul. de 2011
Respostas 14
Participantes 8