鱼片宝宝 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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog