繁体   English   中英

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

[英]Comparing dates in C with (Using time.h library)

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

我会在time_t值上使用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);
}

您需要strptime函数将字符串转换为struct tm 它是Posix的一部分,但不是C标准。 http://www.cs.potsdam.edu/cgi-bin/man/man2html?3+strptime有一个如何使用strptime

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

根据C标准,对time_t值进行算术运算是不可移植的,这就是你应该修改struct tm字段的原因。 同样,您需要使用difftime与当前时间进行difftime

使用birthdate填充struct tm并将其转换为time_t。

使用time()获取当前time_t。

一周是86400 * 7秒。

检查birthdate time_t和当前time_t之间的差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM