1.3 - Classe NovoTempo
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 NovoTempo implements ITempo {
private int totalDeSegundosDeUmDia;
private void incrementaSegundosTotais(int valor) {
if (valor > 0) {
totalDeSegundosDeUmDia += valor;
}
}
private void setSegundosTotais(int valor) {
if (valor > 0) {
totalDeSegundosDeUmDia = valor;
}
}
public NovoTempo(int hora, int minuto, int segundo) {
incrementaHora(hora);
incrementaMinuto(minuto);
incrementaSegundo(segundo);
}
public NovoTempo(ITempo tempo) {
this(tempo.getHora(), tempo.getMinuto(), tempo.getSegundo());
}
@Override
public int getHora() {
return totalDeSegundosDeUmDia / 3600 % 24;
}
@Override
public void setHora(int hora) {
setSegundosTotais(hora * 3600 + getMinuto() * 60 + getSegundo());
}
@Override
public int getMinuto() {
return totalDeSegundosDeUmDia / 60 % 60;
}
@Override
public void setMinuto(int minuto) {
setSegundosTotais(getHora() * 3600 + minuto * 60 + getSegundo());
}
@Override
public int getSegundo() {
return totalDeSegundosDeUmDia % 60;
}
@Override
public void setSegundo(int segundo) {
setSegundosTotais(getHora() * 3600 + getMinuto() * 60 + segundo);
}
@Override
public boolean ehUltimoSegundoDoTempo() {
return totalDeSegundosDeUmDia == 86399;
}
@Override
public void incrementaHora(int hora) {
incrementaSegundosTotais(hora * 3600);
}
@Override
public void incrementaMinuto(int minuto) {
incrementaSegundosTotais(minuto * 60);
}
@Override
public void incrementaSegundo(int segundo) {
incrementaSegundosTotais(segundo);
}
@Override
public String toString() {
int hh = getHora();
int mm = getMinuto();
int ss = getSegundo();
return String.format("%02d:%02d:%02d", hh, mm, ss);
}
}