linux time t 类型,什么是最终的time_t类型定义?

答案肯定是特定于实现的。 要明确地找到您的平台/编译器,只需在您的代码中添加此输出:

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);

新问题:这个想法的理由是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值