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);
    }

}


        
Copyright © 2016 AIEC.