diff options
Diffstat (limited to 'gcc/ada/a-calend.ads')
-rw-r--r-- | gcc/ada/a-calend.ads | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/gcc/ada/a-calend.ads b/gcc/ada/a-calend.ads index a394e2bbcaf..9f4e66a1d43 100644 --- a/gcc/ada/a-calend.ads +++ b/gcc/ada/a-calend.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2006, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -127,4 +127,66 @@ private type Time is new Duration; + -- The following package provides handling of leap seconds. It is + -- used by Ada.Calendar.Arithmetic and Ada.Calendar.Formatting, both + -- Ada 2005 children of Ada.Calendar. + + package Leap_Sec_Ops is + + After_Last_Leap : constant Time := Time'Last; + -- Bigger by far than any leap second value. Not within range of + -- Ada.Calendar specified dates. + + procedure Cumulative_Leap_Secs + (Start_Date : Time; + End_Date : Time; + Leaps_Between : out Duration; + Next_Leap_Sec : out Time); + -- Leaps_Between is the sum of the leap seconds that have occured + -- on or after Start_Date and before (strictly before) End_Date. + -- Next_Leap_Sec represents the next leap second occurence on or + -- after End_Date. If there are no leaps seconds after End_Date, + -- After_Last_Leap is returned. This does not provide info about + -- the next leap second (pos/neg or ?). After_Last_Leap can be used + -- as End_Date to count all the leap seconds that have occured on + -- or after Start_Date. + -- + -- Important Notes: any fractional parts of Start_Date and End_Date + -- are discarded before the calculations are done. For instance: if + -- 113 seconds is a leap second (it isn't) and 113.5 is input as an + -- End_Date, the leap second at 113 will not be counted in + -- Leaps_Between, but it will be returned as Next_Leap_Sec. Thus, if + -- the caller wants to know if the End_Date is a leap second, the + -- comparison should be: + -- + -- End_Date >= Next_Leap_Sec; + -- + -- After_Last_Leap is designed so that this comparison works without + -- having to first check if Next_Leap_Sec is a valid leap second. + + function All_Leap_Seconds return Duration; + -- Returns the sum off all of the leap seoncds. + + end Leap_Sec_Ops; + + procedure Split_With_Offset + (Date : Time; + Year : out Year_Number; + Month : out Month_Number; + Day : out Day_Number; + Seconds : out Day_Duration; + Offset : out Long_Integer); + -- Split_W_Offset has the same spec as Split with the addition of an + -- offset value which give the offset of the local time zone from UTC + -- at the input Date. This value comes for free during the implementation + -- of Split and is needed by UTC_Time_Offset. The returned Offset time + -- is straight from the C tm struct and is in seconds. If the system + -- dependent code has no way to find the offset it will return the value + -- Invalid_TZ_Offset declared below. Otherwise no checking is done, so + -- it is up to the user to check both for Invalid_TZ_Offset and otherwise + -- for a value that is acceptable. + + Invalid_TZ_Offset : Long_Integer; + pragma Import (C, Invalid_TZ_Offset, "__gnat_invalid_tzoff"); + end Ada.Calendar; |