簡體   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