2016-12-25 64 views
-6

我有这样的代码:为什么年份会在C中返回116而不是2016年?

#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年的价值谁能告诉我为什么?自1900年以来

+6

您是否尝试过阅读的文档?什么'tm_year'存储? –

+0

@ n.m。它已在库timeh中声明如下: struct tm { int \t tm_sec; int \t tm_min; int \t tm_hour; int \t tm_mday; int \t tm_mon; int \t tm_year; int \t tm_wday; int \t tm_yday; int \t tm_isdst; –

+4

请仔细阅读[手册](https://linux.die.net/man/3/localtime) –

回答

3

tm_year场被表示为年:https://linux.die.net/man/3/localtime

+0

对不起,但我没有得到你所说的。你可以说得更详细点吗? –

+0

@ A.Pearce - 请解释你不明白的部分 –

+3

我怎么能比这更具体?该字段的定义是自1900年以来的年数。自2016年以来,2016 - 1900年为116年。 – ra4king

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; 
} 
相关问题