Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中比较两次_C_Datetime_Compare - Fatal编程技术网

在C中比较两次

在C中比较两次,c,datetime,compare,C,Datetime,Compare,如何比较C语言中的时间? 我的程序正在获取2个文件的上次修改时间,然后比较该时间以查看哪个时间是最晚的。 是否有一个函数可以为您比较时间,或者您必须自己创建一个?这是我的获取时间函数: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/stat.h> #include <sys/types.h> void getFileCreationTime

如何比较C语言中的时间? 我的程序正在获取2个文件的上次修改时间,然后比较该时间以查看哪个时间是最晚的。 是否有一个函数可以为您比较时间,或者您必须自己创建一个?这是我的获取时间函数:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>

void getFileCreationTime(char *path) {
    struct stat attr;
    stat(path, &attr);
    printf("Last modified time: %s", ctime(&attr.st_mtime));
}
#包括
#包括
#包括
#包括
#包括
void getFileCreationTime(字符*路径){
结构统计属性;
统计(路径和属性);
printf(“上次修改时间:%s”,ctime(&attr.st_mtime));
}

使用
time.h中的
difftime(time1,time0)
获取两次之间的差值。这将计算
time1-time0
,并返回一个
double
,表示以秒为单位的差值。如果为正值,则
time1
晚于
time0
;如果为负,
time0
更晚;如果为0,则它们是相同的。

您可以使用下面的方法

double difftime (time_t end, time_t beginning);

它以秒为单位返回时间差。您可以找到

您可以比较两个
时间
值,以找到更新的值:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>

static time_t getFileModifiedTime(const char *path)
{
    struct stat attr;
    if (stat(path, &attr) == 0)
    {
        printf("%s: last modified time: %s", path, ctime(&attr.st_mtime));
        return attr.st_mtime;
    }
    return 0;
}

int main(int argc, char **argv)
{
    if (argc != 3)
    {
        fprintf(stderr, "Usage: %s file1 file2\n", argv[0]);
        return 1;
    }
    time_t t1 = getFileModifiedTime(argv[1]);
    time_t t2 = getFileModifiedTime(argv[2]);
    if (t1 < t2)
        printf("%s is older than %s\n", argv[1], argv[2]);
    else if (t1 > t2)
        printf("%s is newer than %s\n", argv[1], argv[2]);
    else
        printf("%s is the same age as %s\n", argv[1], argv[2]);
    return 0;
}
#包括
#包括
#包括
#包括
静态时间\u t getFileModifiedTime(常量字符*路径)
{
结构统计属性;
if(stat(path,&attr)==0)
{
printf(“%s:上次修改时间:%s”、路径、ctime(&attr.st_mtime));
返回attr.st_mtime;
}
返回0;
}
int main(int argc,字符**argv)
{
如果(argc!=3)
{
fprintf(stderr,“用法:%s file1 file2\n”,argv[0]);
返回1;
}
time_t t1=getFileModifiedTime(argv[1]);
time_t t2=getFileModifiedTime(argv[2]);
if(t1t2)
printf(“%s比%s\n新”,argv[1],argv[2]);
其他的
printf(“%s与%s相同\n”,argv[1],argv[2]);
返回0;
}
如果您想知道以秒为单位的值之间的差异,则需要正式使用,但实际上,您可以简单地减去两个
时间值。

我的代码:

char * findLeastFile(char *file1, char *file2){
    struct stat attr1, attr2;
    if (stat(file1, &attr1) != 0 || stat(file2, &attr2) != 0)
    {
        printf("file excetion");
        return NULL;
    }
    if(difftime(attr1.st_mtime,attr2.st_mtime) >= 0)
        return file1;
    else 
        return file2;

}

它可能是特定于操作系统的。我猜您正在使用Linux或某些POSIX系统。