Ada.Calendar时区是否知晓?

时间:2014-08-04 04:21:29

标签: ada

我正在使用一些遗留的Ada 95代码,原始开发人员在其中定义时间戳如下:

type Timestamp_Time_Type is
record
  Month   : Month_No_Type  := Min_Month;
  Day     : Day_No_Type    := Min_Day;
  Hours   : Hour_No_Type   := Min_Hour;
  Minutes : Minute_No_Type := Min_Minute;
  Seconds : Second_No_Type := Min_Second;
end record;

这里没有关注这一年,这是因为收到的邮件的时间戳缺少一年字段。

我想要确定的是,为什么他们不会只使用Ada.Calendar中定义的时间类型。我能想到的唯一原因是,这个包中定义的Time_Of和Split子程序可能只使用GMT转换为epoch值和从epoch值转换。那么,Time_Of和Split子程序是否会自动考虑机器的时区,或者程序员是否需要编写代码才能先转换为GMT?

2 个答案:

答案 0 :(得分:3)

Ada95几乎肯定不是时区感知的.LRM简单地说时间类型......

“包裹日历中的时间类型的值,或某些其他实现定义的时间类型的值,表示相应时钟报告的时间。”

Ada.Calendar.Time_Zones包在Ada 2005中引入。

答案 1 :(得分:0)

对于程序不使用Ada.Calendar.Time的问题的可能答案:Ada.Calendar.Time是一种私有类型,其表示形式未由语言指定。因此,如果可以通过由不同编译器构建的Ada代码读取它,或者如果它们决定更改表示,则可以通过相同编译器的更高版本读取,或者通过非阿达计划。如果Timestamp_Time_Type是直接写入文件或套接字的东西,那么这将是不使用Time的一个很好的理由。 (由于字节排序,写整数会导致自身的可移植性问题,但看起来这里的所有整数都适合一个字节。)

另一个原因可能是效率。 Split需要一点时间,可能需要只进行一次拆分然后传递结果字段,而不是每次程序需要字段时使用Split

然而,在不了解该计划的情况下,这是所有猜测。