Ada.Real_Time.Clock 为不同版本的 GNATPro Ada 编译器返回不同的值
Ada.Real_Time.Clock returning different values for different versions of GNATPro Ada compiler
我正在使用 2 个虚拟机 (VMWare);一台 VM 具有 GNATPro Ada 编译器 7.3.2 和 Ada.Real_Time.Clock returns 预期的自纪元开始以来的秒数。另一个 VM 有 GNATPro 19.0 和 Ada.Real_Time.Clock returns 自 VM 启动以来的秒数。
我们在两个 VM 上都使用 Ada 95。
我检查过两台虚拟机的时间设置是一样的。
为了检查这是否是编译器差异,我在 Gnat Pro 19.0 上编译了一个小测试程序,并 运行 它在使用旧编译器的虚拟机上编译。我得到的结果与使用较新版本的编译器在 VM 上得到的结果相同。然后我用旧编译器编译了测试程序,运行 它在 VM 上用新编译器编译,得到的结果与在 VM 上用旧编译器得到的结果相同。
我的问题是有没有人知道我如何获得 Ada.Real_Time.Clock 到 return 从 GNATPro 19.0
纪元开始的秒数
下面是测试程序
with Test_Io;
with Ada.Real_Time;
procedure Time_Test is
Current_Real_Time : Ada.Real_Time.Time;
Time_Span : Ada.Real_Time.Time_Span;
Seconds_Count : Ada.Real_Time.Seconds_Count;
begin
Current_Real_Time := Ada.Real_Time.Clock;
Ada.Real_Time.Split (
T => Current_Real_Time,
Sc => Seconds_Count,
Ts => Time_Span);
Test_Io.Put_Line("TRACE: Seconds_Count = " & Seconds_Count'Img);
end Time_Test;
RM D.8 说:
"Time值I表示以E+I*Time_Unit开始,以E+(I+1)*Time_Unit为限的半开实时区间,其中Time_Unit 是一个实现定义的实数,E 是一个未指定的起点,即纪元,对于所有时间类型的值都是相同的。语言没有指定时间值是否与任何标准时间同步参考。[比如E可以对应系统初始化的时间,也可以对应某个时间标准的epoch]
因此实现可以自由选择它想要的任何时代。
当你说“时代”时,我假设你心中有一个特定的价值? UNIX 时间?
Ada.Calendar.Time 挂钟行为可能会更好。
我正在使用 2 个虚拟机 (VMWare);一台 VM 具有 GNATPro Ada 编译器 7.3.2 和 Ada.Real_Time.Clock returns 预期的自纪元开始以来的秒数。另一个 VM 有 GNATPro 19.0 和 Ada.Real_Time.Clock returns 自 VM 启动以来的秒数。
我们在两个 VM 上都使用 Ada 95。
我检查过两台虚拟机的时间设置是一样的。
为了检查这是否是编译器差异,我在 Gnat Pro 19.0 上编译了一个小测试程序,并 运行 它在使用旧编译器的虚拟机上编译。我得到的结果与使用较新版本的编译器在 VM 上得到的结果相同。然后我用旧编译器编译了测试程序,运行 它在 VM 上用新编译器编译,得到的结果与在 VM 上用旧编译器得到的结果相同。
我的问题是有没有人知道我如何获得 Ada.Real_Time.Clock 到 return 从 GNATPro 19.0
纪元开始的秒数下面是测试程序
with Test_Io;
with Ada.Real_Time;
procedure Time_Test is
Current_Real_Time : Ada.Real_Time.Time;
Time_Span : Ada.Real_Time.Time_Span;
Seconds_Count : Ada.Real_Time.Seconds_Count;
begin
Current_Real_Time := Ada.Real_Time.Clock;
Ada.Real_Time.Split (
T => Current_Real_Time,
Sc => Seconds_Count,
Ts => Time_Span);
Test_Io.Put_Line("TRACE: Seconds_Count = " & Seconds_Count'Img);
end Time_Test;
RM D.8 说:
"Time值I表示以E+I*Time_Unit开始,以E+(I+1)*Time_Unit为限的半开实时区间,其中Time_Unit 是一个实现定义的实数,E 是一个未指定的起点,即纪元,对于所有时间类型的值都是相同的。语言没有指定时间值是否与任何标准时间同步参考。[比如E可以对应系统初始化的时间,也可以对应某个时间标准的epoch]
因此实现可以自由选择它想要的任何时代。
当你说“时代”时,我假设你心中有一个特定的价值? UNIX 时间? Ada.Calendar.Time 挂钟行为可能会更好。