比较C中的日期与(使用time.h库)

比较C中的日期与(使用time.h库),c,compare,date,C,Compare,Date,大家好,我可以将YYYY-MM-DD格式的人生日与字符串(strcmp)函数进行比较。但我需要将今天的日期与某人的生日进行比较,以显示他/她的生日是否在7天内?。我搜索了“time.h”库,但无法管理它。如果您能提供帮助,我将不胜感激。我将在时间值上使用difftime,并与一周的秒数进行比较…用出生日期填充struct tm并将其转换为时间 使用time()获取当前时间 一周是86400*7秒 检查出生日期时间与当前时间之间的差异。您想要使用strtime函数将字符串转换为struct tm。

大家好,我可以将YYYY-MM-DD格式的人生日与字符串(strcmp)函数进行比较。但我需要将今天的日期与某人的生日进行比较,以显示他/她的生日是否在7天内?。我搜索了“time.h”库,但无法管理它。如果您能提供帮助,我将不胜感激。

我将在
时间
值上使用
difftime
,并与一周的秒数进行比较…

用出生日期填充struct tm并将其转换为时间

使用time()获取当前时间

一周是86400*7秒


检查出生日期时间与当前时间之间的差异。

您想要使用
strtime
函数将字符串转换为
struct tm
。它是Posix的一部分,但不是C标准。 有一个如何使用
strtime
的示例

然后,您希望在
tm_mday
字段中添加7,将结果转换为
time\t
(使用
mktime
),然后将其与当前时间(从
time(NULL)
)进行比较,以便查看输入日期是否在下周内


根据C标准,对
time\u t
值进行算术运算是不可移植的,因此您应该修改
struct tm
字段。同样,您需要使用
difftime

与当前时间进行比较。下面的示例程序将参数行上的给定字符串转换为天数。 示例输出:

% ./nd 2011-06-18 1971-02-10 invalid 2010invalid
38 days
-14699 days
2147483647 days
2147483647 days
编辑:决定-1不是一个很好的故障指示器,所以改用INX_MAX

#include <sys/param.h>
#include <time.h>
#include <string.h>
#include <stdio.h>

#define ONE_DAY (24 * 3600)

int main(int argc, char *argv[])
{
        int i;

        if( argc < 2 )
                return (64); // EX_USAGE

        for( i=1; i < argc; i++ )
        {
                time_t res;

                res = num_days(argv[i]);
                printf("%d days\n", res);
        }

        return(0);
}

int num_days(const char *date)
{
        time_t now = time(NULL);
        struct tm tmp;
        double res;

        memset(&tmp, 0, sizeof(struct tm));
        if( strptime(date, "%F", &tmp) == NULL )
                return INT_MAX;

        res = difftime(mktime(&tmp), now);
        return (int)(res / ONE_DAY);
}
#包括
#包括
#包括
#包括
#定义一天(24*3600)
int main(int argc,char*argv[])
{
int i;
如果(argc<2)
return(64);//exu用法
对于(i=1;i
那么,我如何将时间变量中的字符串(例如“2010-11-10”)转换为compare todays date。我还可以从文件中读取此人的生日字符串。您可以将值加载到
struct tm
的字段中,然后使用
mktime
获得
time
值。只需确保所有未使用的字段都被清除为0。好吧,朋友,我想这次mktime将显示此人出生的日期。但我需要在程序执行的7天内是否有人的生日。那么如何将时间变量中的字符串(例如“2010-11-10”)转换为compare todays date。我还从文件中读到了这个人的生日字符串。哥们,你做了什么:D.图书馆是什么?#包括“我从来没用过它”。为什么我们要使用memset?。我尝试“2010-11-25”将此字符串转换为时间变量,并将结果与现在进行比较。因此,如果结果小于或等于7,则输出将“他的生日在近7天内”和什么“int main(int argc,char*argv[]){int i;if(argc<2)返回(64);//EX_用法”这是程序执行的控制机制吗?sys/param.h包含系统的参数。除其他外,它定义了INT\u MAX,这是一个整数类型可以保持的最大值。它还定义了MAXPATHLEN,这是一个路径可以具有的最大长度。是的,如果num\u days的结果大于0且小于等于7,则可以说“用户在一周内有一个生日!”哦,我使用memset,因为strTime只填充在格式字符串中指定的struct tm的部分,所以memset确保未定义的部分现在定义为0。我只复制粘贴代码进行测试,它给出了一个错误,上面写着“newfile.c:37:40:警告:指针和整数之间的比较”“对于行“if(strtime(date,”%F“,&tmp)==NULL)”。。您没有包括或在系统时间中。h没有在时间中定义。h。请参阅system.int main()上的strtime手册页{char buff[11];char birth[11]=“2011-05-15”;int res;time\u t now=time(NULL);strftime(buff,20,”%Y-%m-%d\n),localtime(&now));res=difftime(mktime(birth),now);printf(“%d”,res);返回0;}使用此代码,我可以比较字符串“buff”和“birth”。buff将当前时间作为字符串获取。我可以管理此部分,但res变量始终显示0。