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