time_t最大的有用价值是什么?

时间:2013-02-07 17:23:53

标签: c time

找出time_t的有效值范围似乎非常困难。

在某些平台上32位,最多64位,因此很容易设置为LONG_MAX。但是,尝试使用该值并不能正常工作。例如,您无法将其传递给localtime并将其更改为struct tm

快速测试程序以二进制搜索该值告诉我它是67768036191676799.这对应于年末2147483647,因此这是有意义的值。但它是否在任何地方指定,并且是否存在任何合理的,与平台无关的最大可用时间值?

3 个答案:

答案 0 :(得分:1)

实际上,time_t和clock_t的规范是实现定义的(C99 7.23.1)。

这是我建议您不要自己生成这些值的其中一项,但依靠实现为您创建它们,例如使用mktime(),并使用struct tm直接操作时间。 -1是time_t的唯一值,它是您可以自己使用的“好”值。

我特别建议您不要将它视为任何类型的32位值,正如jgm建议的那样。你永远不知道一些奇怪的嵌入式编译器是想要使用16位时间还是18或者谁知道。

答案 1 :(得分:0)

最安全的使用方式是32位签名,只要你对它在25年后的工作中感到满意。

否则,您将不得不在您运行的任何平台上自行测试该类型并采取相应措施。

答案 2 :(得分:0)

tm_year的类型为int,因此,如果您要转换为struct tm,则有意义的最大time_t是与INT_MAX年对应的值。< / p>