2011-03-21 21 views
10

क्या कोई जानता है कि ISO-8601 -formatted दिनांक/समय स्ट्रिंग से time_t पर कैसे जाना है? मैं सी ++ का उपयोग कर रहा हूं और इसे विंडोज और मैक पर काम करने की ज़रूरत है।मैं एक आईएसओ 8601 स्ट्रिंग को सी ++ में time_t में कैसे परिवर्तित करूं?

मैंने कोड लिखा है लेकिन मुझे यकीन है कि एक संस्करण है जो अधिक "मानक" है।

मुझे 2011-03-21 20:25 जैसी तारीख मिल जाएगी और मुझे यह बताना होगा कि समय अतीत या भविष्य में है या नहीं।

+2

एक पार मंच के बारे में एक ऐसी ही चर्चा है [यहां] (http://stackoverflow.com/questions/321,849/strptime-बराबर-ऑन-विंडोज़)। आप ravenspoint के उत्तर को चाहते हैं, और बढ़ावा का उपयोग करें: '# शामिल करें" बूस्ट/डेट_टाइम/posix_time/posix_time.hpp "' – Tim

उत्तर

6

आप strptime का उपयोग एक स्ट्रिंग से एक struct tm कन्वर्ट करने के लिए कर सकते हैं, और फिर आप mktime उपयोग कर सकते हैं एक struct tm से एक time_t कन्वर्ट करने के लिए। उदाहरण के लिए:

// Error checking omitted for expository purposes 
const char *timestr = "2011-03-21 20:25"; 
struct tm t; 
strptime(timestr, "%Y-%m-%d %H:%M", &t); 
time_t t2 = mktime(&t); 
// Now compare t2 with time(NULL) etc. 
+2

स्ट्रैप्टिम मानक सी नहीं है। क्या यह विंडोज़ पर उपलब्ध होगा? –

+1

@ शून्य सेट: ओह, आप सही हैं, इसके बारे में भूल गए। 'strptime' केवल POSIX द्वारा परिभाषित किया गया है। Http://stackoverflow.com/questions/321849/strptime-equivalent-on- विन्डोज़ और http://stackoverflow.com/questions/667250/strptime-in- विन्डोज देखें। –

7

एक बदसूरत हैक मैंने सोचा मजेदार होगा: के बाद से आप केवल निर्धारित करने के लिए जो दिनांक/समय बड़ा है चाहते हैं, आप स्ट्रिंग के लिए तारीख बदलने और तार की तुलना कर सकते हैं। `Strptime` ;-) (उल्टा आप strptime जो हर जगह उपलब्ध नहीं है की आवश्यकता नहीं है।)

#include <string.h> 
#include <time.h> 

int main(int argc, char *argv[]) 
{ 
    const char *str = "2011-03-21 20:25"; 
    char nowbuf[100]; 
    time_t now = time(0); 
    struct tm *nowtm; 
    nowtm = localtime(&now); 
    strftime(nowbuf, sizeof(nowbuf), "%Y-%m-%d %H:%M", nowtm); 
    if (strncmp(str, nowbuf, strlen(str)) >= 0) puts("future"); else puts("past"); 
    return 0; 
} 
+3

जबकि मैं सहजता से इस तरह के विचार पर चिल्लाता हूं ... यह "YYYYMMDD HHMMSS" प्रारूप का बिंदु है - असीसी तुलना वास्तव में काम करती है। जोखिम, ज़ाहिर है कि अगर वह भविष्य में एक अलग प्रारूप में तिथियां प्राप्त करना शुरू कर देता है। – Tim

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