:
class Data {
public final static int MAX_ROK = 99999;
public final static int ROK_PRZESTEPNY = 365;
public final static int ROK_NIE_PRZESTEPNY = 366;
public final static int MIESIAC_MAX = 12;
public final static int LUTY_PRZESTEPNY = 28;
public final static int LUTY_NIE_PRZESTEPNY = 29;
public final static int MIESIAC_1 = 31;
public final static int MIESIAC_2 = 30;
//wybor kolejnosci prezentacji
public final static int ROK_MIESIAC_DZIEN = 0;
public final static int DZIEN_MIESIAC_ROK = 1;
private int rok = -1;
private int miesiac = -1;
private int dzien = -1;
public Data(int rok, int miesiac, int dzien) throws Exception {
sprawdzRok(rok);
this.rok = rok;
sprawdzMiesiac(miesiac);
this.miesiac = miesiac;
sprawdzDzien(dzien);
this.dzien=dzien;
}
public void ustawDate(int rok, int miesiac, int dzien) throws Exception {
sprawdzRok(rok);
this.rok = rok;
sprawdzMiesiac(miesiac);
this.miesiac = miesiac;
sprawdzDzien(dzien);
this.dzien=dzien;
}
/*
*
*/
public boolean czyPrzestepny() {
if((rok % 4 == 0 && rok % 100 != 0) || rok % 400 == 0)
return true;
return false;
}
public int pobierzRok() {
return rok;
}
public int pobierzMiesiac() {
return miesiac;
}
public int pobierzDzien() {
return dzien;
}
public String pokazDate(int prezentacja, char pomiedzy) {
String data = null;
switch(prezentacja) {
case 0: data = new String(""+rok+pomiedzy+miesiac+pomiedzy+dzien);
break;
default: data = new String(""+dzien+pomiedzy+miesiac+pomiedzy+rok);
break;
}
return data;
}
public double pobierzWartosc() {
double val = rok;
double m_d = miesiac;
double d_d = dzien;
val+= (m_d-1) / 12;
double max_dzien = MIESIAC_1;
if(miesiac % 2 == 0) max_dzien = MIESIAC_2;
if(miesiac == 2) {
max_dzien = LUTY_NIE_PRZESTEPNY;
if(czyPrzestepny())
max_dzien = LUTY_PRZESTEPNY;
}
double x = 1;
val+=(d_d*(x/MIESIAC_MAX) ) / max_dzien;
return val;
}
/* zwraca prawde jesli data podana na wejsciu
* jest wieksza */
public boolean czyWieksza(Data dat) {
if(dat.pobierzWartosc() > this.pobierzWartosc())
return true;
return false;
}
private void sprawdzRok(int rok) throws Exception {
if(rok<=0 || rok>99999) throw new Exception("Błąd! Rok nie moze wynosić: "+rok);
}
private void sprawdzMiesiac(int miesiac) throws Exception {
if(miesiac<=0 || miesiac>MIESIAC_MAX) throw new Exception("Błąd! Miesiąc nie moze wynosić: "+miesiac); //numerowanie od 1
}
private void sprawdzDzien(int dzien) throws Exception {
if(dzien<=0 || dzien>MIESIAC_1) throw new Exception("Błąd! Dzień nie moze wynosić: "+dzien); //numerowanie od 1
if(miesiac == -1) throw new Exception("Błąd! Nie można zweryfikować poprawności dnia, bez znanego miesiąca");
if(rok == -1) throw new Exception("Błąd! Nie można zweryfikować poprawności dnia, bez znanego roku");
if(miesiac == 2) { //luty
if(czyPrzestepny() && dzien >LUTY_PRZESTEPNY) throw new Exception("Błąd! Wartość dnia, w miesiącu lutym dla roku przestepnego musi być <=28");
else if(dzien > LUTY_NIE_PRZESTEPNY) throw new Exception("Błąd! Wartość dnia, w miesiącu lutym dla roku nie przestepnego musi być <=29");
} else {
if(miesiac % 2 ==0) {
if(dzien > MIESIAC_2 ) throw new Exception("Błąd! Wartość dnia, w miesiącu "+miesiac+" musi być <="+MIESIAC_2 );
} else {
if(dzien > MIESIAC_1) throw new Exception("Błąd! Wartość dnia, w miesiącu "+miesiac+" musi być <="+MIESIAC_1);
}
}
}
}
public class Main {
private Data dat1;
private Data dat2;
public Main() throws Exception {
dat1 = new Data(2000,10,5);
dat2 = new Data(2000,10,4);
System.out.println("Data1 = "+dat1.pokazDate(Data.DZIEN_MIESIAC_ROK, '.'));
System.out.println("Data2 = "+dat2.pokazDate(Data.ROK_MIESIAC_DZIEN, '-'));
System.out.println("Czy Data2 jest wieksze niz Data1: "+dat1.czyWieksza(dat2));
System.out.println("Wartosc daty1 = "+dat1.pobierzWartosc());
System.out.println("Wartosc daty2 = "+dat2.pobierzWartosc());
dat1.ustawDate(2007,2,31); //wywola exception
}
public static void main(String[] args) {
try {
new Main();
}catch(Exception e) {
System.out.println("Wystapil wyjatek:\n"+e.getMessage());
System.exit(-1);
}
}
}