为什么年份在C中返回116而不是2016?

时间:2016-12-25 10:15:31

标签: c date time.h

我有这段代码:

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

int main(void) {

    time_t rawtime = time(NULL);
    struct tm *ptm = localtime(&rawtime);
    printf("The time is: %02d:%02d:%02d\n", ptm->tm_hour, 
           ptm->tm_min, ptm->tm_sec);
    printf("The date is: %02d:%02d:%04d\n.", ptm->tm_mday, ptm->tm_mon, ptm->tm_year);
    return 0;
}

当我运行它时,它会将tm_year的值返回为116而不是2016.有人可以告诉我原因吗?

2 个答案:

答案 0 :(得分:3)

tm_year字段表示为自1900年以来的年份:https://linux.die.net/man/3/localtime

答案 1 :(得分:2)

由于tm_year是自1900年以来的年数,因此您需要为此添加1900。

来源:http://pubs.opengroup.org/onlinepubs/7908799/xsh/time.h.html

所以你得到:

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

int main(void) {

    time_t rawtime = time(NULL);
    struct tm *ptm = localtime(&rawtime);
    printf("The time is: %02d:%02d:%02d\n", ptm->tm_hour, 
           ptm->tm_min, ptm->tm_sec);
    printf("The date is: %02d:%02d:%04d\n.", ptm->tm_mday, ptm->tm_mon, ptm->tm_year+1900);
    return 0;
}