2013-12-16 6 views
5

कैसे प्राप्त करें मैं मौसम विज्ञान सॉफ्टवेयर पैकेज द्वारा उपयोग की जाने वाली फ़ाइलों के उचित सेट को डाउनलोड करने के लिए एक छोटा सा प्रोग्राम प्रोग्रामिंग कर रहा हूं। फाइलें यूटीसी में YYYYMMDD और YYYYMMDD HHMM जैसी प्रारूप में हैं। मैं सी ++ में यूटीसी में वर्तमान समय जानना चाहता हूं और मैं उबंटू पर हूं। क्या ऐसा करने का कोई आसान तरीका है?यूटीसी समय

+0

क्या आप प्रश्न को पुन: स्थापित कर सकते हैं: क्या आप यूटीसी से स्थानीय नामों को _reformat_ करना चाहते हैं? या आप यूटीसी के रूप में वर्तमान समय _access_ करना चाहते हैं? –

+0

बस यूटीसी में वर्तमान समय तक पहुंचें, भ्रम के लिए खेद है, मैं सवाल संपादित करूंगा। –

उत्तर

7

सी ++ में एक उच्च अंत उत्तर Boost Date_Time का उपयोग करना है।

लेकिन यह अधिक हो सकता है। सी पुस्तकालय में आपको strftime में क्या चाहिए, मैन्युअल पृष्ठ में एक उदाहरण है।

/* from man 3 strftime */ 

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

int main(int argc, char *argv[]) { 
    char outstr[200]; 
    time_t t; 
    struct tm *tmp; 
    const char* fmt = "%a, %d %b %y %T %z"; 

    t = time(NULL); 
    tmp = gmtime(&t); 
    if (tmp == NULL) { 
     perror("gmtime error"); 
     exit(EXIT_FAILURE); 
    } 

    if (strftime(outstr, sizeof(outstr), fmt, tmp) == 0) { 
     fprintf(stderr, "strftime returned 0"); 
     exit(EXIT_FAILURE); 
    } 
    printf("%s\n", outstr); 
    exit(EXIT_SUCCESS); 
}   

मैं क्या मैनुअल पृष्ठ में है के आधार पर एक पूर्ण उदाहरण कहा:

$ gcc -o strftime strftime.c 
$ ./strftime 
Mon, 16 Dec 13 19:54:28 +0000 
$ 
+0

स्ट्रेटटाइम मैनपेज उदाहरण लोकलटाइम() हालांकि का उपयोग करता है। ओटीसी समय प्राप्त करने के लिए ओपी को जीएमटाइम() की आवश्यकता होगी। – nos

+0

स्ट्रैटाइम का उपयोग करना सबसे अच्छा दिखने वाला विकल्प प्रतीत होता है। धन्यवाद। यदि आवश्यक हो तो मैं मैन्युअल रूप से यूटीसी में परिवर्तित कर सकता हूं, लेकिन मैं देखना चाहता हूं कि क्या कहा गया है। –

+0

@nos मैं gmtime() का उपयोग कर डीएसटी के लिए कैसे खाता करूं? –

4

आप gmtime उपयोग कर सकते हैं:

std::string now() 
{ 
    std::time_t now= std::time(0); 
    std::tm* now_tm= std::gmtime(&now); 
    char buf[42]; 
    std::strftime(buf, 42, "%Y%m%d %X", now_tm); 
    return buf; 
} 
:

struct tm * gmtime (const time_t * timer); 
Convert time_t to tm as UTC time 

यहाँ एक उदाहरण है

विचारधारा लिंक: http://ideone.com/pCKG9K

+4

आपको 'std :: strftime (buf, sizeof buf, ...)' का उपयोग करना चाहिए। यह ध्यान देने योग्य भी है कि 'वापसी बफ;' केवल वैध है क्योंकि मान को निश्चित रूप से 'std :: string' में परिवर्तित कर दिया गया है; यदि 'अब' ने' char * '(जैसा कि यह संभवतः सी में होगा) लौटाया है, तो आप एक स्थानीय ऑब्जेक्ट में एक पॉइंटर वापस कर रहे होंगे, जो एक बड़ा नो-नो है। –

+3

नोट: यदि संभव हो तो आप 'gmtime_r' का उपयोग करना चाहेंगे, जबकि गैर-मानक, दोनों पुन: प्रवेशकर्ता और डेटा-रेस सुरक्षित है। –

+0

@MatthieuM। आप सही हैं, मैं आमतौर पर gmtime_r के अस्तित्व के लिए एक जांच होगी। मैंने सोचा कि यह इस जवाब के लिए अधिक था। उपयोगी प्रतिक्रिया के लिए धन्यवाद। – nurettin

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