鱼片宝宝 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 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘