Advanced   Java   Services JAVA-Praktikum Back Next Up Home
Anlegen einer Datumsklasse (Lösung)
// ------------------------------ Datum.java ------------------------------- \\

public class Datum
{

   // ---------------------------- isLeapYear() ----------------------------- \\
   public static boolean isLeapYear(int jahr)
   {
      return (jahr%4==0 && jahr%100!=0) || jahr%400==0 ;
   }

   // ------------------------------ isDate() ------------------------------- \\
   public static boolean isDate(int tag, int mon, int jahr)
   {
      boolean leapyear = isLeapYear(jahr) ;

      if ( jahr<1562 || mon<1 || mon>12 || tag<1 || tag>31 )
         return false;

      if ( (mon==4 || mon==6 || mon==9 || mon==11) && tag>30)
         return false;

      if(   (mon==2 && leapyear && tag>29) ||
            (mon==2 && !leapyear && tag>28) )
         return false;

      return true;
   }

   // ------------------------- getDayOfTheWeek() --------------------------- \\
   public static int getDayOfTheWeek(int d, int m, int y)
   {
      int h = m , k = y ;

      if ( m <=2 )
      {
         h = m + 12 ;
         k = y - 1 ;
      }

      return (d + 2*h + (3*h+3)/5 + k + k/4 - k/100 + k/400+1)%7;
   }

   // -------------------------- getEaster() ---------------------------- \\
   public static int[] getEaster(int jahr)
   {
      int a, b, c, d, e, n, p, q, r, x, y, tag, monat ;

      //Es geht um die Berechnung der Größen d und e
      //Dazu braucht man die 9 Hilfsgrößen a, b, c, p, n, q, r, x, y !!
      a = jahr%19 ;
      b = jahr%4 ;
      c = jahr%7 ;

      p = jahr/100 ;
      n = jahr%100 ;

      q = p/3 ;
      r = p/4 ;

      x = (15+p-q-r)%30 ;
      y = (4+p-r)%7 ;

      d = (19*a+x)%30 ;
      e = (2*b+4*c+6*d+y)%7 ;

      if (d==29 && e==6)
      {
         //=> Ostern am 19.April
         tag=19; monat=4;
      }
      else if (d==28 && e==6)
      {
         //=> Ostern am 18.April
         tag=18; monat=4;
      }
      else if (22+d+e < 32) //ansonsten gilt
      {
         //=>  Ostern am (22+d+e).März
         tag=22+d+e; monat=3;
      }
      else
      {
         // =>  Ostern am (d+e-9).April
         tag=d+e-9; monat=4;
      }

      return new int[] {tag, monat, jahr} ;

   } // getEasterDate


   // -------------------------- getPfingsten() --------------------------- \\
   public static int[] getPfingsten(int jahr)
   {
      int a, b, c, d, e, n, p, q, r, x, y, tag, monat ;

      //Es geht um die Berechnung der Größen d und e
      //Dazu braucht man die 9 Hilfsgrößen a, b, c, p, n, q, r, x, y !!
      a = jahr%19 ;  b = jahr%4 ;   c = jahr%7 ;

      p = jahr/100 ; n = jahr%100 ;

      q = p/3 ;      r = p/4 ;

      x = (15+p-q-r)%30 ;
      y = (4+p-r)%7 ;

      d = (19*a+x)%30 ;
      e = (2*b+4*c+6*d+y)%7 ;

      // d==28 && e==6  => Pfingsten  06.06
      // d==29 && e==6  => Pfingsten  07.06

      if (d==28 && e==6)
      {
         //=> Ostern am 18.April // Pfingsten am 06.06.
         tag=6; monat=6;
      }
      else if (d==29 && e==6)
      {
         //=> Ostern am 19.April Pfingsten am 07.06
         tag=7; monat=6;
      }
      else if (d+e < 22) //d+e<22  Pfingsten (10+d+e).05
      {
         tag=10+d+e; monat=5;
      }
      else // d+e>=22
      {
         //  (d+e-21).06
         tag=d+e-21; monat=6;
      }

      return new int[] {tag, monat, jahr} ;
   }

   // ------------------------ getFaschingsSonntag() ------------------------- \\
   public static int[] getFaschingsSonntag(int jahr)
   {
      // noch nicht implementiert
      return null;
   }

   // ------------------------- getAschermittwoch() -------------------------- \\
   public static int[] getAschermittwoch(int jahr)
   {
      // noch nicht implementiert
      return null;
   }

} // end class Datum
Valid XHTML 1.0 Strict top Back Next Up Home