我想了解下面的陈述是做什么的:
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的时间,以秒为单位。但我不明白为什么:
NULL
传递了time()
?如果我传递非空值怎么办?我无法理解这里的手册页。localtime()
实际上做了什么?答案 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);
就像你看到的那样,原型说time
以time_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;
}