g-catiio.adb (Image): For the case of %s...

2007-08-14  Hristian Kirtchev  <kirtchev@adacore.com>

	* g-catiio.adb (Image): For the case of %s, use Ada.Calendar.Time
	values to compute the number of seconds since the Unix Epoc in order to
	account for Daylight Savings Time. Perform special processing for dates
	that are earlier than the Unix Epoc to obtain a negative number.

From-SVN: r127450
This commit is contained in:
Hristian Kirtchev 2007-08-14 10:47:45 +02:00 committed by Arnaud Charlet
parent bfc2cdb1e7
commit 154c16575f

View File

@ -306,15 +306,33 @@ package body GNAT.Calendar.Time_IO is
when 's' =>
declare
Sec : constant Sec_Number :=
Sec_Number (Julian_Day (Year, Month, Day)
- Julian_Day (1970, 1, 1)) * 86_400
+ Sec_Number (Hour) * 3_600
+ Sec_Number (Minute) * 60
+ Sec_Number (Second);
-- Compute the number of seconds using Ada.Calendar.Time
-- values rather than Julian days to account for Daylight
-- Savings Time.
Neg : Boolean := False;
Sec : Duration := Date - Time_Of (1970, 1, 1, 0.0);
begin
Result := Result & Image (Sec, None);
-- Avoid rounding errors and perform special processing
-- for dates earlier than the Unix Epoc.
if Sec > 0.0 then
Sec := Sec - 0.5;
elsif Sec < 0.0 then
Neg := True;
Sec := abs (Sec + 0.5);
end if;
-- Prepend a minus sign to the result since Sec_Number
-- cannot handle negative numbers.
if Neg then
Result :=
Result & "-" & Image (Sec_Number (Sec), None);
else
Result := Result & Image (Sec_Number (Sec), None);
end if;
end;
-- Second (00..59)