Interface to Dates Package

Go to Package Implementation

WITH Ada.Calendar;
PACKAGE Dates IS
------------------------------------------------------------------
--|
--| specification for package to represent calendar dates
--|
--| Author: Michael B. Feldman, The George Washington University
--| Last Modified: September 1995
--|
------------------------------------------------------------------

  SUBTYPE YearNumber  IS Ada.Calendar.Year_Number;
  SUBTYPE MonthNumber IS Ada.Calendar.Month_Number;
  SUBTYPE DayNumber   IS Ada.Calendar.Day_Number;
  SUBTYPE JulianDay   IS Positive RANGE 1..366;
  SUBTYPE WeekDay     IS Positive RANGE 1..7;

  TYPE Date IS PRIVATE;

  -- exported exception
  Date_Error : EXCEPTION;

  -- constructors
  FUNCTION Today                       RETURN Date;
  -- Pre:  none
  -- Post: returns the current date

  FUNCTION MakeDate(Year  : YearNumber;
                    Month : MonthNumber;
                    Day   : DayNumber) RETURN Date;
  -- Pre:    Year, Month, and Day are defined
  -- Post:   returns a Date object
  -- Raises: Date_Error if Year, Month, and Day do not
  --   form a valid date (e.g. 6/31/93 or 2/29/93)

  -- selectors
  FUNCTION Year       (Right: Date) RETURN YearNumber;
  FUNCTION Month      (Right: Date) RETURN MonthNumber;
  FUNCTION DayOfMonth (Right: Date) RETURN DayNumber;
  FUNCTION DayOfYear  (Right: Date) RETURN JulianDay;
  FUNCTION DayOfWeek  (Right: Date) RETURN WeekDay;
  -- Pre:  Right is defined
  -- Post: these return the corresponding parts of the Date object

  -- comparison operators
  FUNCTION "<"  (Left, Right: Date) RETURN Boolean;
  FUNCTION "<=" (Left, Right: Date) RETURN Boolean;
  FUNCTION ">"  (Left, Right: Date) RETURN Boolean;
  FUNCTION ">=" (Left, Right: Date) RETURN Boolean;
  -- Pre:  Left and Right are defined
  -- Post: these return the result of the corresponding comparison

  -- arithmetic operators
  FUNCTION "+"  (Left: Date; Right: JulianDay) RETURN Date;
  FUNCTION "+"  (Left: JulianDay; Right: Date) RETURN Date;
  FUNCTION "-"  (Left: Date; Right: JulianDay) RETURN Date;
  -- Pre:  the arguments are defined
  -- Post: return a Date in the near future or recent past

PRIVATE
  TYPE Date IS RECORD
    Year:      YearNumber  := YearNumber'First;
    DayOfYear: JulianDay   := 1;
  END RECORD;
END Dates;