从c中的st_mtime比较年份

时间:2018-10-29 19:17:11

标签: c linux

我正在编写自己的ls -l程序,并且必须显示文件中间日期。它工作得很好,直到我意识到应该以格式“ dd”,“ mm”显示日期,然后才显示今年的文件中的小时和分钟。 如果我要检查的是目录或在不同年份的最后一次修改 我必须以“ dd”,“ mm”,“ yyyy”的格式输出日期。 我不知道如何只比较st_mdate的年份来更改输出。 试图使if语句检查我正在描述的东西是否是目录,它起作用了。但是现在我也需要对普通文件执行类似的操作。 我的问题是如何比较st_mdate年。

这是我的职能:

void mdate(struct stat mystat){
    if(S_ISDIR(mystat.st_mode)){
        char mtime[80];
        time_t t = mystat.st_mtime;  
        struct tm lt;
        localtime_r(&t, &lt); 
        strftime(mtime, sizeof mtime, "%d %b %Y ", &lt);
        printf(" %-12s", strtok(mtime,"n"));
    }
    else{
        char mtime[80];
        time_t t = mystat.st_mtime;
        struct tm lt;
        localtime_r(&t, &lt); 
        strftime(mtime, sizeof mtime, "%d %b %H:%M ", &lt);
        printf(" %-12s", strtok(mtime,"n"));
    }       
}

编辑: 这是我的 output

编辑2

知道了,这是我的最终代码:

void mdate(struct stat mystat){
    time_t current;
    time_t t = mystat.st_mtime;  
    struct tm * timeinfo;
    char mtime[80];
    struct tm lt;

    time ( &current );
    timeinfo = localtime ( &current );
    localtime_r(&t, &lt); 

    if(S_ISDIR(mystat.st_mode)|| (timeinfo->tm_year>lt.tm_year)) {
        strftime(mtime, sizeof mtime, "%d %b %Y ", &lt);
        printf(" %-13s", strtok(mtime,"\n"));
    }
    else {
        strftime(mtime, sizeof mtime, "%d %b %H:%M ", &lt);
        printf(" %-13s", strtok(mtime,"\n"));
    }       
}

0 个答案:

没有答案