Dato.java [Last ned]

/*
 * Beskriver en Dato-klasse med tre objektvariabler:
 * år, mnd og dag. Klassen har objekmetoder for å
 * sammenligne, skrive ut og teste lovlig oppsett.
 * Forenklet oppsett for en dato er  åååå.mm.dd
 */
import static java.lang.Integer.*;
public class Dato {
 
  // Årstallet er 4-sifret
  private int år, mnd, dag;
 
  public Dato(int å, int m, int d) {
    år = å;
    mnd = m;
    dag = d;
  }
 
  public Dato(String strDato) {
    String[] datoTab = strDato.split("\\.");
    // Merk spesielt skilletegn for punktum (se s.225 i boken)
    år = parseInt(datoTab[0]);
    mnd = parseInt(datoTab[1]);
    dag = parseInt(datoTab[2]);
  }
 
  public boolean lik(Dato d) {
    return ( år == d.år && mnd == d.mnd && dag == d.dag );
  }
 
  public boolean før(Dato d) {
    // Avgjør om dette objektets dato (denneDato)
    // tidsmessig kommer før parameteren (annenDato)
    String denneDato = toString();
    String annenDato = d.toString();
    return (denneDato.compareTo(annenDato) < 0);
  }
 
  public boolean lovlig () {
    // Avgjør om både år, mnd og dag har lovlige verdier
    boolean okÅr = (1700 <= år && år <= 2099);
    // Sjekk gjerne hvorfor 1700 er nedre grense
    boolean okMnd = (1 <= mnd && mnd <= 12);
    boolean okDag = (1 <= dag && dag <= antallDager(år, mnd) );
    return okÅr && okMnd && okDag;
  }
 
  public String toString() {
    String ut = år + ".";
    if ( mnd < 10 ) ut += "0";
    ut += mnd+".";
    if ( dag < 10 ) ut += "0";
    ut += dag;
    return ut;
  }
 
  // Hjelpemetoder fra Kalender-eksemplet i kap. 4
  private static int antallDager(int å, int m) {
    int d = 31;
    if ( m == 4 || m == 6 || m == 9 || m == 11 )
      d = 30;
    else if ( m == 2 ) {
      if ( skuddår(å) )
        d = 29;
      else
        d = 28;
    }
    return d;
  }
 
  private static boolean skuddår(int å) {
    return ( (å%4==0 && å%100!=0) || (å%400 == 0) );
  }
 
}
Kildekode blir vist ved hjelp av GeSHi.