Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- with Ada.Text_Io; use Ada.Text_Io;
- with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;
- package body Time_Handling is
- procedure Get(Time : out Date_Type) is
- C : Character;
- begin
- Put("Mata in ett datum: ");
- Get(Time(1));
- if (Time(1) > 9999) or (Time(1) < 1) then
- raise Year_Error;
- end if;
- Get(C);
- Get(Time(2));
- if (Time(2) > 12) or (Time(2) < 1) then
- raise Month_Error;
- end if;
- Get(C);
- Get(Time(3));
- if (Time(2) = 1 or Time(2) = 3 or Time(2) = 5 or Time(2) = 7 or Time(2) = 8 or Time(2) = 10 or Time(2) = 12) then
- if (Time(3) > 31) or(Time(3) < 1) then
- raise Day_Error;
- end if;
- elsif (Time(2) = 4 or Time(2) = 6 or Time(2) = 9 or Time(2) = 11) then
- if (Time(3) > 30) or (Time(3) < 1) then
- raise Day_Error;
- end if;
- elsif (Time(2) = 2) then
- if (Time(3) > 28) or (Time(3) < 1) then
- raise Day_Error;
- end if;
- end if;
- end Get;
- -------------------------------------------------------------------------------------------------------------------------------------
- procedure Put(Time : in Date_Type) is
- begin
- Put("Ett datum: ");
- Put(Time(1), Width => 0);
- Put("-");
- if (Time(2) < 10) then
- Put(0, Width => 0);
- Put(Time(2), Width => 0);
- else
- Put(Time(2), Width => 0);
- end if;
- Put("-");
- if (Time(3) < 10) then
- Put(0, Width => 0);
- Put(Time(3), Width => 0);
- else
- Put(Time(3), Width => 0);
- end if;
- New_Line;
- end Put;
- ----------------------------------------------------------------
- function Next_Date (Tid : in Date_Type) return Date_Type is
- Time : Date_Type;
- begin
- Time := Tid;
- Time(3) := Time(3)+1;
- if (Time(2) = 1 or Time(2) = 3 or Time(2) = 5 or Time(2) = 7 or Time(2) = 8 or Time(2) = 10 or Time(2) = 12) and (Time(3) > 31) then
- if Time(2) = 12 then
- Time(1) := Time(1)+1;
- Time(2) := 1;
- Time(3) := 1;
- else
- Time(2) := Time(2)+1;
- Time(3) := 1;
- end if;
- elsif (Time(2) = 4 or Time(2) = 6 or Time(2) = 9 or Time(2) = 11) and (Time(3) > 30) then
- Time(2) := Time(2)+1;
- Time(3) := 1;
- elsif Time(2) = 2 and Time(3) > 28 then
- Time(2) := Time(2)+1;
- Time(3) := 1;
- end if;
- return(Time);
- end Next_Date;
- -----------------------------------------------------------------------------------------------------
- function Previous_Date (Tid : in Date_Type) return Date_Type is
- Time : Date_Type;
- begin
- Time := Tid;
- Time(3) := Time(3)-1;
- if (Time(2) = 1 or Time(2) = 4 or Time(2) = 6 or Time(2) = 8 or Time(2) = 9 or Time(2) = 11 or Time(2) = 2) and (Time(3) < 1) then
- if Time(2) = 1 then
- Time(1) := Time(1)-1;
- Time(2) := 12;
- Time(3) := 31;
- else
- Time(2) := Time(2)-1;
- Time(3) := 31;
- end if;
- elsif (Time(2) = 5 or Time(2) = 7 or Time(2) = 10 or Time(2) = 12) and (Time(3) < 1) then
- Time(2) := Time(2)-1;
- Time(3) := 30 ;
- elsif Time(2) = 3 and Time(3) < 1 then
- Time(2) := Time(2)-1;
- Time(3) := 28;
- end if;
- return(Time);
- end Previous_Date;
- function ">" (Left, Right : in Date_Type) return Boolean is
- begin
- if Left(1) > Right(1) then
- return(True);
- elsif Left(1) < Right(1) then
- return(False);
- elsif Left(2) > Right(2) then
- return(True);
- elsif Left(2) < Right(2) then
- return(False);
- elsif Left(3) > Right(3) then
- return(True);
- elsif Left(3) < Right(3) then
- return(False);
- else
- return(False);
- end if;
- end ">";
- function "<" (Left, Right : in Date_Type) return Boolean is
- begin
- if Left(1) < Right(1) then
- return(True);
- elsif Left(1) > Right(1) then
- return(False);
- elsif Left(2) < Right(2) then
- return(True);
- elsif Left(2) > Right(2) then
- return(False);
- elsif Left(3) < Right(3) then
- return(True);
- elsif Left(3) > Right(3) then
- return(False);
- else
- return(False);
- end if;
- end "<";
- function "=" (Left, Right : in Date_Type) return Boolean is
- begin
- if (Left(1) = Right(1)) and (Left(2) = Right(2)) and (Left(3) = Right(3)) then
- return(True);
- else
- return(False);
- end if;
- end "=";
- end Time_Handling;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement