鱼片宝宝 2016-01-14 13:05 采纳率: 0%
浏览 1276

标C的时间函数还是有点不理解,有大神么?

小菜鸟今天刚学了标C的时间函数,好多结论都是网上看的,不知道哪里出问题了。

【结论一】
time_t =0 的时候 返回的时间其实是 1970-01-01 00:00:00 到UTC 0时区的秒数,而不是 我们北京时间UTC+8;所以gmtime比localtime 小8小时。

因此time返回的时间也比本地时间少8个小时 即少 28800秒

虽然如此,但是 localtime 是将时区考虑在内了,因此虽然传入的秒数UTC时间比本地时间少8个小时,但是转出来的时间结构体还是和本地时间相同。

【结论二】

struct tm that;

that.tm_year = 70;
that.tm_month = 0;
that.tm_mday = 1;
that.tm_hour =0;
that.tm_min = 0;
that.tm_src = 0;

printf("that=%ld",mktime(&that););

// 结果是 28800秒

// 结论

mktime() 的传出秒数 是 1970年1月1日0小时0分0秒(UTC)到  1970年1月1日0时0分0秒(北京时间)经过的秒数,因此是 8个小时,28800秒。

即mktime() 返回的时间其实是 1970-01-01 00:00:00 到本地时区,我们北京时间UTC+8的秒数

【矛盾案例三】
time_t now = time(NULL);
struct tm NOW = *localtime(&now);
time_t now2 = mktime(&NOW);

// 结果 now2的值和 now1的值相等
这和结论一,二矛盾了。
按理 mktime 的时间 比 time(NULL) 的时间应该多 8个小时啊。

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-01-14 13:41
    关注

    这个要看C标准库怎么得到时区信息了,一些环境下得不到时区信息,所以就不计算时区了。

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置