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

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

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

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

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

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

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

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

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

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