2012-03-03 10 views
5

2 मार्च, 2012 का प्रतिनिधित्व करने वाली एक स्ट्रिंग "2012-03-02" मुझे एक इनपुट चर (char *) के रूप में दी गई है।मैं "2012-03-02" में सीिक्स में यूनिक्स युग में कैसे परिवर्तित करूं?

मैं इस तारीख को सी प्रोग्रामिंग भाषा में यूनिक्स युग समय में कैसे परिवर्तित करूं?

उत्तर

2

सी (POSIX) इसके लिए एक कार्य प्रदान करता है। स्ट्रिंग को struct tm मान में बदलने के लिए strptime() का उपयोग करें। इसके बाद आप struct tm को time_t में mktime() का उपयोग करके परिवर्तित कर सकते हैं।

+2

यह मानक नहीं है, सी, यह पॉज़िक्स है। –

2

, एक sscanf साथ टुकड़े निकालें पॉप्युलेट struct tm (<time.h> से) डेटा निकाले साथ, और अंत में mktime का उपयोग यह time_t कन्वर्ट करने के लिए।

time_t ParseDate(const char * str) 
{ 
    struct tm ti={0}; 
    if(sscanf(str, "%d-%d-%d", &ti.tm_year, &ti.tm_mon, &ti.tm_day)!=3) 
    { 
     /* ... error parsing ... */ 
    } 
    ti.tm_year-=1900 
    ti.tm_mon-=1 
    return mktime(&ti); 
} 
0

एक struct tm में पढ़ें और mktime फोन अपने time_t मिलता है।

1

स्थानीय समय या यूटीसी? यदि यह यूटीसी है, रूपांतरण करने के लिए सबसे आसान तरीका है सी समय एपीआई पूरी तरह से बचने और अवधि के बाद सेकंड के लिए POSIX में सूत्र का उपयोग करने के लिए है:

tm_sec + tm_min*60 + tm_hour*3600 + tm_yday*86400 + 
    (tm_year-70)*31536000 + ((tm_year-69)/4)*86400 - 
    ((tm_year-1)/100)*86400 + ((tm_year+299)/400)*86400 

स्रोत: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15

यदि यह स्थानीय समय आ गया है, समस्या इस तथ्य के कारण नरक में बदल जाती है कि time_t को पॉसिक्स सिस्टम को छोड़कर युग के बाद सेकंड के रूप में प्रतिनिधित्व करने की गारंटी नहीं है, और तथ्य यह है कि युग के time_t मान की गणना करना मुश्किल है (mktime काम नहीं करेगा क्योंकि यह उपयोग करता है स्थानीय समय)। युग के लिए time_t की गणना करने के बाद, हालांकि, आपके द्वारा पार्स किए गए समय मूल्य के लिए mktime का उपयोग करना और फिर difftime पर कॉल करना है।

संबंधित मुद्दे