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