我觉得自己很蠢,因为我似乎没有一个简单的自然数来表示自Ada的unix时代(01/01/1970,00:00:00)以来的秒数。我读过Ada.Calendar,它是上下的子包,但似乎找不到实现这一目标的合理方法,即使Ada.Calendar.Clock本身正是我想要的……
我快疯了。有正确的方向吗?
发布于 2015-12-12 14:30:23
使用Ada.Calendar.Formatting,构造一个表示纪元的Time。
Epoch : constant Time := Formatting.Time_Of(1970, 1, 1, 0.0);检查Ada.Calendar.Clock和Epoch之间的差异。
Put(Natural(Clock - Epoch)'Img);对照这个http://www.epochconverter.com/或Unix命令date +%s检查结果。
有关其他详细信息,请参阅http://www.adaic.org/resources/add_content/standards/05rat/html/Rat-7-3.html和http://www.ada-auth.org/standards/12rat/html/Rat12-6-6.html#I1540。
发布于 2016-12-05 12:07:33
根据POSIX标准,UNIX时间不计算闰秒,而Ada.Calendar."-“处理它们
对于返回的值,如果天= 0,则秒+持续时间(Leap_Seconds)=日历。“-”(左,右)。
一种选择是使用Ada.Calendar.Time将Ada.Calendar.Formatting.Split分割成几个部分,然后使用POSIX算法将其收集回来。
最好的选择似乎是使用Ada.Calendar.Arithmetic.Difference。它返回天、秒和Leap_Seconds。然后,您可以将天* 86_400 +秒组合起来获取UNIX时间,Leap_Seconds将根据POSIX的要求显式丢弃。
我最近一直在解决这个问题,并发布了一个图书馆进入公共领域。
发布于 2017-03-22 06:44:24
在Ada的GNAT实现中,有一个私有包Ada.Calendar.Conversions,其中包含Calendar的子级使用的Ada <-> Unix转换。
https://stackoverflow.com/questions/34239915
复制相似问题