答案肯定是特定于实现的。 要明确地找到您的平台/编译器,只需在您的代码中添加此输出:
printf ("sizeof time_t is: %d\n", sizeof(time_t));
如果答案是4(32位),并且你的数据要超过2038 ,那么你有25年的时间来迁移你的代码。
如果将数据存储为字符串,则数据将会正常工作,即使它是这样简单的:
FILE *stream = [stream file pointer that you've opened correctly]; fprintf (stream, "%d\n", (int)time_t);
然后用相同的方法读取它(fread,fscanf等等),并且你有你的纪元偏移时间。 .Net中存在类似的解决方法。 我在Win和Linux系统之间传递了64位的时代数字(通过通信渠道)。 这带来了字节顺序问题,但这是另一个主题。
为了回答paxdiablo的查询,我会说它打印了“19100”,因为程序是这样写的(我承认自己在80年代就这样做了):
time_t now; struct tm local_date_time; now = time(NULL); // convert, then copy internal object to our object memcpy (&local_date_time, localtime(&now), sizeof(local_date_time)); printf ("Year is: 19%02d\n", local_date_time.tm_year);
printf语句打印固定字符串“Year is:19”,后面跟着“1900年以来的年份”(定义tm->tm_year )的零填充字符串。 在2000年,这个数值显然是100。 "%02d"两个零,但不超过两位数时截断。
正确的方法是(只改变到最后一行):
printf ("Year is: %d\n", local_date_time.tm_year + 1900);
新问题:这个想法的理由是什么?