Classe para calcular Horas

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… :?:

[code]/**
*

  • @author Vitoriano
    */
    class CalculaHora {

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

    }

}
[/code]

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)

Vitoriano trabalha com long no lugar do int.

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

java.util.Date

Procure pela classe Calendar.

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

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.

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

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

[code]/**
*

  • @author Vitoriano
    */
    class CalculaHora {

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

    }

}[/code]

Referente ao que usar, qual o melhor?

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

[quote=Vitoriano]

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

[code]/**
*

  • @author Vitoriano
    */
    class CalculaHora {

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

    }

}[/code]

Referente ao que usar, qual o melhor?

Calendar :?:
java.util.Date :?:
JodaTime :?:
:idea: [/quote]

Alguém? Li um pouco de cada, mas não “vi” qual melhor…

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.

[quote=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.[/quote]
Obrigado!! :idea:

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.

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

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:

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

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

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!

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