1.2 - Classe Tempo
package br.aiec;
/**
*
* Historicamente, até o ano de 1954, o segundo era entendido como 1/86400 de um
* dia solar médio (ou 1/3600 de uma hora, ou 1/60 de um minuto), sendo assim
* definido em relação às dimensões e a rotação da Terra.
*
* Essa classe abstrai uma das possíveis formas de representação do tempo
* (hora:minuto:segundo) de um dia solar médio no calendário gregoriano.
*
*
*
*/
public class Tempo implements ITempo {
private int hora;
private int minuto;
private int segundo;
public Tempo(int hora, int minuto, int segundo) {
setHora(hora);
setMinuto(minuto);
setSegundo(segundo);
}
public Tempo(ITempo tempo) {
this(tempo.getHora(), tempo.getMinuto(), tempo.getSegundo());
}
@Override
public int getHora() {
return hora;
}
@Override
public void setHora(int hora) {
if (hora >= 0 && hora <= 23) {
this.hora = hora;
}
}
@Override
public int getMinuto() {
return minuto;
}
@Override
public void setMinuto(int minuto) {
if (minuto >= 0 && minuto <= 59) {
this.minuto = minuto;
}
}
@Override
public int getSegundo() {
return segundo;
}
@Override
public void setSegundo(int segundo) {
if (segundo >= 0 && segundo <= 59) {
this.segundo = segundo;
}
}
@Override
public boolean ehUltimoSegundoDoTempo() {
return this.hora == 23 && this.minuto == 59 && this.segundo == 59;
}
@Override
public void incrementaHora(int hora) {
int h = this.hora + hora;
if (h > 23) {
h = h % 24;
}
this.hora = h;
}
@Override
public void incrementaMinuto(int minuto) {
int m = this.minuto + minuto;
if (m > 59) {
incrementaHora(m / 60);
m = m % 60;
}
this.minuto = m;
}
@Override
public void incrementaSegundo(int segundo) {
int s = this.segundo + segundo;
if (s > 59) {
incrementaMinuto(s / 60);
s = s % 60;
}
this.segundo = s;
}
@Override
public String toString() {
return String.format("%02d:%02d:%02d", this.hora, this.minuto,
this.segundo);
}
}