函数localtime()如何使用?

时间:2016-12-28 08:39:09

标签: c linux function datetime gcc

我想了解下面的陈述是做什么的:

tmptr = localtime(&t);

完整的代码是:

main() {
    char dateString[20], timeString[20];
    struct tm *tmptr;
    time_t t;
    t = time(NULL);
    tmptr = localtime(&t);
    strftime(dateString, 20, "%F",tmptr)
    printf("%s %s\n",dateString,timeString);
}

我知道函数time(NULL)给出了来自UNIX Epoch的时间,以秒为单位。但我不明白为什么:

  1. NULL传递了time()?如果我传递非空值怎么办?我无法理解这里的手册页。
  2. localtime()实际上做了什么?

2 个答案:

答案 0 :(得分:1)

该手册页非常清楚该参数:

time_t time(time_t *t); 
     

...

     

如果t为非NULL,则返回值也会存储在内存中   由t指出。

这意味着您可以像这样使用它:

time t;
t = time(NULL);

或者像这样:

time t;
time(&t);

正确识别t中的结果是自纪元以来的秒数。 如果您想获得一些人类可读的日期和时间,您需要通过localtime()

进行转换

答案 1 :(得分:0)

time()是C lib的一个非常古老的功能。 time_t time(time_t *t);就像你看到的那样,原型说timetime_t *为参数并返回time_t。这意味着您可以通过两种方式获得结果。你可以这样做或者:

time_t t;
if ((time_t)-1 == time(&t)) {
  perror("time()");
  return 1;
}

如果你做time(NULL),该函数不能将结果存入指针time_t *,因为该男子说:

  

如果t为非NULL,则返回值也存储在内存中   t指出。

localtime()转换自Epoch以来的秒数,并将其拆分为年,月等。您应该使用localtime_r(),因为它的线程安全。

struct tm result;
if (localtime_r(&t, &result) == NULL) {
  return 1;
}