找出time_t
的有效值范围似乎非常困难。
在某些平台上32位,最多64位,因此很容易设置为LONG_MAX
。但是,尝试使用该值并不能正常工作。例如,您无法将其传递给localtime
并将其更改为struct tm
。
快速测试程序以二进制搜索该值告诉我它是67768036191676799.这对应于年末2147483647,因此这是有意义的值。但它是否在任何地方指定,并且是否存在任何合理的,与平台无关的最大可用时间值?
答案 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>