2012-06-26 15 views
23

मेरे पास एक स्ट्रिंग वेरिएबल है जिसमें एचएच: मिमी: एसएस प्रारूप है। इसे time_t प्रकार में कैसे परिवर्तित करें? उदाहरण के लिए: स्ट्रिंग time_details = "16:35:12"एक स्ट्रिंग वेरिएबल को समय-समय पर C++ में टाइप करने के लिए कैसे परिवर्तित करें?

इसके अलावा, कैसे समय युक्त दो चर तुलना करने के लिए इतनी के रूप में तय करने के लिए जो जल्द से जल्द है? जैसे: स्ट्रिंग curr_time = "18:35:21" स्ट्रिंग user_time = "22:45:31"

+2

नोट के लिए कि टाइम_टी आधी रात के बाद से सेकंड की संख्या, 1 जनवरी 1970 इस इसे का उपयोग जूस एन्कोड करने के लिए सावधान रहना encodes तारीख के बिना समय टी। –

उत्तर

37

आप strptime(3) उपयोग कर सकते हैं समय पार्स करने के लिए, और फिर mktime(3) यह एक time_t में बदलने के लिए:

const char *time_details = "16:35:12"; 
struct tm tm; 
strptime(time_details, "%H:%M:%S", &tm); 
time_t t = mktime(&tm); // t is now your desired time_t 
+0

'strptime' लिनक्स-विशिष्ट है, मुझे विश्वास है। –

+3

@ केलीस्ट्रैंड: यह POSIX.1-2001 (और एसयूएसवी 2) का हिस्सा है। आप सही हैं कि यह मानक सी या सी ++ नहीं है, लेकिन यह सिर्फ लिनक्स से अधिक है। –

+0

धन्यवाद। मुझे यह जांचना चाहिए था। –

11

यह काम करना चाहिए:

int hh, mm, ss; 
struct tm when = {0}; 

sscanf_s(date, "%d:%d:%d", &hh, &mm, &ss); 


when.tm_hour = hh; 
when.tm_min = mm; 
when.tm_sec = ss; 

time_t converted; 
converted = mktime(&when); 

संशोधित रूप में की जरूरत है।

+0

ध्यान दें कि 'sscanf_s' सी ++ तरीका यह संभाल करने के लिए नहीं है, यह सी रास्ता नहीं है (हालांकि इस मामले में यह काम करते हैं और यथोचित सुरक्षित है, इसलिए कोई downvote है जाएगा)। 'Std :: stringstream' और' >> 'का उपयोग करना अधिक idiomatic C++ होगा। – ssube

+0

@peachykeen हाँ, यह सही है। आप पोस्ट करते हैं तो सी ++ संस्करण, मैं :) –

+3

इस कोड को वोट दें जाएगा समय प्राप्त कर सकते हैं, लेकिन कैसे के बारे में ** तारीख ** (YYYY-MM-DD)? –

34

के साथ सी ++ 11 तुम अब

struct std::tm tm; 
std::istringstream ss("16:35:12"); 
ss >> std::get_time(&tm, "%H:%M:%S"); // or just %T in this case 
std::time_t time = mktime(&tm); 

देखने के लिए कर सकते हैं std::get_time और strftime संदर्भ

+1

मुझे लगता है कि यह है कि std :: get_time उल्लेख करने के लिए लायक है संस्करण 5 से जीसीसी में ** उपलब्ध है **, आप तो '# शामिल ' – MBI

+1

mktime नहीं ले और टीएम चाहिए की ज़रूरत है? – bkarj

+0

'std :: get_time' में VS2013 के तहत कुछ बग भी हैं उदा। यहाँ http://stackoverflow.com/questions/32019209/is-this-a-bug-in-stdget-time और यहाँ http://stackoverflow.com/questions/35041344/trying-to-use-stdget-time- टू-पार्स yymmdd-और-नाकाम रहने के –

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