Como forma de exemplificar o referido conceito, observe o exemplo a seguir que abstrai a data do calendário gregoriano. Considere também que o exemplo, é apenas uma das várias formas possíveis de demonstrar o referido assunto, não devendo ser, portanto, considerado como a única forma de representação. Ou seja, a forma apresentada abaixo é apenas uma dentre as várias formas possíveis de representação do referido conceito.

 
package br.aiec;

/**
 * 
 * Denomina-se calendário gregoriano o calendário promulgado pelo Papa Gregório 
 * XIII em 1582 e adotado,  imediatamente, por Espanha, Itália, Portugal, Polónia
 * e, posteriormente, por todos os  países ocidentais.
 * 
 * A referida classe é uma possível implementação do referido conceito.
 * 
 * 
 *
 */

public class Data {

    private int dia;
    private int mes;
    private int ano;

    private boolean ehAnoBissexto(int valor) {
        return (valor % 400 == 0 || (valor % 100 != 0 && valor % 4 == 0));
    }

    private boolean existeAno(int valor) {
        return valor >= 0 && valor <= 9999;
    }

    private boolean existeMes(int valor) {
        return valor >= 0 && valor <= 12;
    }

    private boolean existeDia(int valor) {
        return valor >= 0 && valor <= limiteDiasMes(mes);
    }

    private int limiteDiasMes(int valor) {
        int dias[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

        if (ehAnoBissexto(ano) && valor == 2) {
            return 29;
        }

        return dias[valor - 1];
    }

    public Data(int d, int m, int a) {
        ano = (existeAno(a)) ? a : 0;
        mes = (existeMes(m)) ? m : 1;
        dia = (existeDia(d)) ? d : 1;
    }
    
    public Data(Data dt){
        ano = dt.ano;
        mes = dt.mes;
        dia = dt.dia;
    }

    public void setDia(int valor) {

        if (existeDia(valor)) {
            dia = valor;
        }
    }

    public int getDia() {
        return dia;
    }

    public void setMes(int valor) {
        if (existeMes(valor)) {
            mes = valor;
        }
    }

    public int getMes() {
        return mes;
    }

    public void setAno(int valor) {
        if (existeAno(valor)) {
            ano = valor;
        }
    }

    public int getAno() {
        return ano;
    }

    public void incrementaAno() {
        ano = (ano + 1) % 10000;
    }

    public void incrementaMes() {
        int novoMes = (mes + 1) % 13;

        if (novoMes == 0) {
            incrementaAno();
            novoMes++;
        }

        if (dia == limiteDiasMes(mes)) {
            dia = limiteDiasMes(novoMes);
        }

        mes = novoMes;
    }

    public void incrementaDia() {
        int novoDia = (dia + 1) % (limiteDiasMes(mes) + 1);

        if (novoDia == 0) {
            incrementaMes();
            novoDia++;
        }

        dia = novoDia;
    }
    
    @Override
    public String toString() {
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}
        
Copyright © 2016 AIEC.