Сравнение дат, чтобы найти, что больше в C - PullRequest
8 голосов
/ 12 марта 2011

Я хочу знать, как найти более крупную дату, используя программу переменного тока

, пожалуйста, помогите мне, плз ....

Спасибо

Ответы [ 4 ]

13 голосов
/ 12 марта 2011

Вы можете использовать функцию difftime:

#include <time.h>
#include <stdio.h>

int main(void) {
  time_t date1, date2;
  // initialize date1 and date2...

  double seconds = difftime(date1, date2);
  if (seconds > 0) {
    printf("Date1 > Date2\n");
  }

  return 0;
}

Если ваши даты не относятся к типу time_t, вы можете использовать функцию mktime для их преобразования.

3 голосов
/ 12 марта 2011
#include <stdio.h>

struct date 
{
   int month;
   int date;
   int year;
};


int main(void)
{
    int i=compare_dates (struct date d1, struct date d2);
    switch(i)
    {
       case -1:
         printf("%d/%d/%d is earlear date than %d/%d %d", D1.day, D1.month, D1.year, D2.day
       case 1: 
         printf("%d/%d/%d is later date than %d/%d/%d",D1.day,D1.month,D1.year,D2.day…
       case 0: 
         printf("%d/%d/%d is the same date than %d/%d/%d", D1.day, D1.month, D1.year, D2.day
     }
   return 0;
}


int compare_dates (struct date d1, struct date d2)
{
    if (d1.year < d2.year)
       return -1;

    else if (d1.year > d2.year)
       return 1;

    if (d1.year == d2.year)
    {
         if (d1.month<d2.month)
              return -1;
         else if (d1.month>d2.month)
              return 1;
         else if (d1.day<d2.day)
              return -1;
         else if(d1.day>d2.day)
              return 1;
         else
              return 0;
    }
}
0 голосов
/ 12 марта 2011

Можете ли вы дать больше информации о том, чего вы хотите достичь? Потому что сравнивать дату действительно легко. В конце концов, это просто количество секунд (или милли, микро, нано, ...) с заданной даты прошлого или структура, содержащая год, месяц, день ... Независимо от формата, сравнение должно быть довольно простым выполнять.

Может быть, вы хотите сравнить две даты, заданные пользователем в виде строк (что-то вроде "2011-03-12 18:38")? Затем вы можете использовать strptime для преобразования строки в struct tm, а затем выполнить сравнение.

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int parse_date(char* date, struct tm* tm)
{
    char* format;
    char* formats[] = {
        "%F %I", /* "2011-03-12 06:38:05 AM" */
        "%F %T", /* "2011-03-12 18:38:05" */
        "%F %R", /* "2011-03-12 18:38" */
        NULL,
    };

    for (format = formats[0]; format; ++ format) {
        if (strptime(date, format, &tm)) {
            return 1;
        }
    }

    return 0;
}

int main(int argc, char** argv)
{
    float diff;

    char* date1;
    char* date2;

    struct tm tm1;
    struct tm tm2;

    time_t time1;
    time_t time2;

    if (argc != 3) {
        fprintf(stderr, "usage: compare-date date1 date2\n");
        exit(1);
    }

    date1 = argv[1];
    date2 = argv[2];

    if (!parse_date(date1, &tm1)) {
        fprintf(stderr, "unsupported date: %s\n", date1);
        exit(1);
    }

    if (!parse_date(date2, &tm1)) {
        fprintf(stderr, "unsupported date: %s\n", date2);
        exit(1);
    }

    time1 = mktime(&tm1);
    time2 = mktime(&tm2);
    diff = difftime(time1, time2);

    printf("%s %c %s\n",
        date1,
        (diff < 0 ? '<' : (diff > 0 ? '>' : '==')),
        date2);

    return 0;
}
0 голосов
/ 12 марта 2011

Вы не сказали, в каком формате у вас есть дата, поэтому я назову два распространенных примера:

  • Если вы используете GNU lib-c (или MinGW) и запросвремя с:

    time_t time (time_t *result)
    

Тогда time_t это просто long int, количество секунд с epoch, и вы можете вычесть одну дату из другой, чтобы узнатьразница в количестве секунд.

  • Если вы используете Windows API и имеете файловую структуру времени:
typedef struct _FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME, *PFILETIME;

, вы можете привести указатель к указателю на ULARGE_INTEGER, и вычтите это, получая разность интервалов в 100 наносекунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...