Commit 154c1657 by Hristian Kirtchev Committed by Arnaud Charlet

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
parent bfc2cdb1
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment