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
对应的值。