[英]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.