2011-03-12 8 views
9

में बड़ा है मैं जो बड़ा एसी कार्यक्रमतिथि तुलना लगाने के लिए जो सी

का उपयोग कर कृपया मुझे बाहर करने में मदद plz तारीख है लगाने के लिए कैसे जानना चाहता हूँ ....

धन्यवाद

+5

आपको तारीखें कैसे उपलब्ध कराई जा रही हैं? –

+5

'sizeof (date1)> sizeof (date2) की तुलना में' आपको बताता है कि कौन सा बड़ा है, या संभवतः मेरी शादी की सालगिरह की तारीख की तुलना करना, जो मेरे लिए एक बड़ी तारीख थी? पहले/बाद में तिथियों की तुलना करने का सामान्य तरीका है, क्योंकि परिमाण इस बात पर निर्भर करता है कि आप कहां से गिन रहे हैं, और यह जरूरी नहीं है। –

उत्तर

0

आप नहीं था 'टी कहते हैं कि जो प्रारूप में आप तिथि होती है, तो मैं दो सामान्य उदाहरण नाम होगा:

  • आप उपयोग कर रहे हैं जीएनयू lib-सी (या MinGW) और के साथ समय क्वेरी:

     
    time_t time (time_t *result) 
    

फिर time_t सिर्फ एक long intepoch के बाद से सेकंड की संख्या है, और आप दूसरे से तारीख घटाना सेकंड अंतर की संख्या पता लगाने के लिए कर सकते हैं।

  • आप Windows API उपयोग कर रहे हैं और एक filetime-संरचना है:
 
typedef struct _FILETIME { 
    DWORD dwLowDateTime; 
    DWORD dwHighDateTime; 
} FILETIME, *PFILETIME; 

आप ULARGE_INTEGER के लिए सूचक को सूचक कास्ट कर सकते हैं, और घटाना है जो आपके द्वारा 100 की संख्या दे रही है -नोसेकंड अंतराल अंतर।

+0

time_t विंडोज कंपाइलर्स पर समान रूप से मान्य है। आपके उत्तर ने मुझे यह सोचने में भ्रमित कर दिया कि यह विजुअल सी ++ कंपाइलर्स में उपलब्ध नहीं था ... – rubenvb

+0

@ रूबेनव हां। ये सिर्फ उदाहरण हैं। –

+0

'time_t' मानक C89 में एक प्रकार है और इसलिए एमएसवीसी के साथ-साथ यूनिक्स सी कंपाइलर्स द्वारा समर्थित है। यद्यपि कई अलग-अलग उप-दूसरी समय संरचनाएं हैं। वास्तव में –

12

आप 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 उपयोग कर सकते हैं।

4
#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

'if (d1.year = d2.year)' '== मुझे लगता है :-) –

+0

@ eznme: धन्यवाद :) – SharpUrBrain

0

क्या आप जो हासिल करना चाहते हैं उसके बारे में अधिक जानकारी दे सकते हैं? क्योंकि तिथि की तुलना करना वास्तव में आसान है। आखिरकार, वे किसी दिए गए पिछले दिनांक, या वर्ष, महीने, दिन, जिसमें एक संरचना के बाद से केवल सेकंड (या मिली, माइक्रो, नैनो, ...) हैं ... प्रारूप चाहे जो भी हो, तुलना बहुत आसान होनी चाहिए प्रदर्शन करने के लिए।

शायद आप उपयोगकर्ता द्वारा दिए गए दो दिनांकों की तुलना स्ट्रिंग के रूप में करना चाहते हैं (कुछ "2011-03-12 18:38")? फिर, आप स्ट्रिंग को struct tm में बदलने के लिए strptime का उपयोग कर सकते हैं, और फिर तुलना करें।

#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; 
} 
संबंधित मुद्दे