Go to Package Interface

WITH Ada.Calendar;
PACKAGE BODY DayWeek IS
--------------------------------------------------------------------
--| Finds the day of the week on which a given date falls.
--| Created by Jason Guthrie 4/18/92
--| modified by Michael Feldman 4/28/92 and 9/30/96
--------------------------------------------------------------------
 
  FUNCTION DayOfWeek (Month: Ada.Calendar.Month_Number;
                      Day  : Ada.Calendar.Day_Number;
                      Year : Ada.Calendar.Year_Number) RETURN DaysOfWeek IS
 
    Month_Code: DaysOfWeek;
    Answer    : DaysOfWeek;
    Century   : DaysOfWeek;
 
  BEGIN -- DayOfWeek
 
    CASE Month IS
 
      WHEN 1 =>      IF Year REM 4 = 0 THEN
                       Month_Code := 5;
                     ELSE
                       Month_Code := 6;
                     END IF;
      WHEN 2 =>      IF Year REM 4 = 0 THEN
                       Month_Code := 1;
                     ELSE
                       Month_Code := 2;
                     END IF;
      WHEN 3 =>      Month_Code := 2;
      WHEN 4 =>      Month_Code := 5;
      WHEN 5 =>      Month_Code := 0;
      WHEN 6 =>      Month_Code := 3;
      WHEN 7 =>      Month_Code := 5;
      WHEN 8 =>      Month_Code := 1;
      WHEN 9 =>      Month_Code := 4;
      WHEN 10 =>     Month_Code := 6;
      WHEN 11 =>     Month_Code := 2;
      WHEN 12 =>     Month_Code := 4;
 
    END CASE;
 
    IF Year/100 = 19 THEN
      Century := 0;
    ELSE
      Century := 6;
    END IF;
 
    Answer := (((Year REM 100) + ((Year REM 100) / 4)
               + Day +    Month_Code +   Century)
               REM 7);
 
    RETURN Answer;
 
  END DayOfWeek;
 
END DayWeek;