为什么在转换为tm struct和back时,两个time_t值之间有一小时的差异?

时间:2016-01-04 13:41:18

标签: c linux utc mktime

当我执行以下代码时:

#include <time.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
  time_t rawtime = 0;
  time_t secs;
  struct tm* timeinfo = gmtime(&rawtime);

  printf("rawtime : %s\n", asctime(timeinfo));

  secs = mktime(timeinfo);

  printf("converted time : %s\n", asctime(gmtime(&secs)));

  return 0;
}

输出结果为:

rawtime : Thu Jan  1 00:00:00 1970
converted time : Wed Dec 31 23:00:00 1969

为什么这一小时差异?

我正在运行Ubuntu 14.10 64bit btw。

1 个答案:

答案 0 :(得分:4)

因为mktime将本地时间而不是系统时间(gmtime)转换为时间戳。