From: David G. <DGr...@am...> - 2013-09-27 17:35:45
|
> I've never attempted Ada so I have not idea of what the issue could > be. However, try defining _USE_32BIT_TIME_T before including the > headers to see if it matters to the end result. If it does, then help > debug the header code. > -- > Earnie That seems to solve the problem. In the compiler source that I downloaded the offender is the function __gnat_localtime_tzoff in the file gcc-4.8.1-2-mingw32-src\gcc-4.8.1\gcc\ada\sysdep.c Here are two simple test programs that you can use to test a fix: Put this one in a file named bugtest.adb - the file name without the extension .adb must be a case-insensitive match for the procedure name. Build it with the command line gnatmake bugtest It displays the current date and a static date which I have set to match today's date. If you modify the static date to match the day thsat you run the test, the only difference between the two displays will be the number of seconds since midnight. -------------------------------- with Ada.Calendar, Ada.Text_IO; use Ada.Calendar, Ada.Text_IO; procedure BugTest is Test_Date_1: Time; Test_Date_2: Time; YN: Year_number; MN: Month_Number; DN: Day_Number; SN: Day_Duration; ISN: Integer; begin Test_Date_1 := Clock; Test_Date_2 := Time_Of(2013, 9, 27); Split(Test_Date_1, YN, MN, DN, SN); ISN := Integer(SN); Put("Year:" & Integer'Image(YN)); Put(", Month:" & Integer'Image(MN)); Put(", Day:" & Integer'Image(DN)); Put_Line(", Seconds:" & Integer'Image(ISN)); Split(Test_Date_2, YN, MN, DN, SN); ISN := Integer(SN); Put("Year:" & Integer'Image(YN)); Put(", Month:" & Integer'Image(MN)); Put(", Day:" & Integer'Image(DN)); Put_Line(", Seconds:" & Integer'Image(ISN)); end BugTest; --------------------------------- Here's another one which displays the current date in finer detail. ----------------------------------- with Ada.Calendar, Ada.Text_IO; use Ada.Calendar, Ada.Text_IO; with GNAT.Calendar; use GNAT.Calendar; procedure BugTest2 is Test_Date_1: Time; YN: Year_number; MN: Month_Number; DN: Day_Number; HN: Hour_Number; MiN: Minute_Number; SN: Second_Number; SSN: Second_Duration; begin Test_Date_1 := Clock; Split(Test_Date_1, YN, MN, DN, HN, MiN, SN, SSN); Put("Year:" & Integer'Image(YN)); Put(", Month:" & Integer'Image(MN)); Put(", Day:" & Integer'Image(DN)); Put(", Hour:" & Integer'Image(HN)); Put(", Minute:" & Integer'Image(MiN)); Put(", Seconds:" & Integer'Image(SN)); Put_Line(", Milliseconds:" & Integer'Image(Integer(1000.0 * Float(SSN)))); end BugTest2; |