小菜鸟今天刚学了标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个小时啊。