2012-06-28 12 views
6

मैं समय-समय मान से पूर्णांक मानों के रूप में घंटे, मिनट और सेकंड निकालने के लिए युग के बाद सेकंड का प्रतिनिधित्व करना चाहता हूं।time_t से घंटे निकालने के लिए कैसे?

घंटों के लिए मूल्य सही नहीं है। क्यूं कर?

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

#include <unistd.h> 

int main() 
{ 
    char buf[64]; 

    while (1) { 
     time_t t = time(NULL); 
     struct tm *tmp = gmtime(&t); 

     int h = (t/360) % 24; /* ### My problem. */ 
     int m = (t/60) % 60; 
     int s = t % 60; 

     printf("%02d:%02d:%02d\n", h, m, s); 

     /* For reference, extracts the correct values. */ 
     strftime(buf, sizeof(buf), "%H:%M:%S\n", tmp); 
     puts(buf); 
     sleep(1); 
    } 
} 

आउटपुट (घंटे 10 होना चाहिए)

06:15:35 
10:15:35 

06:15:36 
10:15:36 

06:15:37 
10:15:37 
+0

"int एच = (टी/3600)% 24; ..." _assumption_ 'time_t' पूर्णांक सेकंड में है। यद्यपि यह सामान्य है, इसलिए इसे सी द्वारा परिभाषित नहीं किया गया है। पोर्टेबल कोड के लिए 'gmtime()/localtime()' या 'difftime()' का उपयोग करें। – chux

उत्तर

5

gmtime() को आपका कॉल पहले से ही यह होता है, जिसके परिणामस्वरूप struct tm सभी क्षेत्रों है। the documentation देखें।

दूसरे शब्दों में, बस

printf("hours is %d\n", tmp->tm_hour); 

मैं, का तर्क था कि इस उचित तरीके से है, क्योंकि यह scarily बड़ी संख्या को शामिल अपने कोड में मैन्युअल रूप से रूपांतरण करने के लिए बचा जाता है। यह किसी भी अन्य समस्या को बनाकर, सर्वोत्तम तरीकों से ऐसा करता है (यानी, इसे दूर करना)। तो 0 गुम जोड़कर अपने कोड को ठीक न करें, लेकिन gmtime() का उपयोग करके।

टाइमज़ोन के बारे में भी सोचें।

+0

धन्यवाद, लेकिन सवाल यह था: गणना सही क्यों नहीं है। (मैं मानता हूं कि संरचना टीएम का उपयोग करना बेहतर दृष्टिकोण है)। –

+2

@ डानास: क्यूज आप इस प्रकार विभाजित कर रहे हैं: टी/360 जहां यह टी/3600 होना चाहिए (याद रखें 60 * 60) – Abhineet

+0

एचएम, वास्तव में सवाल यह था: "टाइम_टी से घंटे कैसे निकालें" (समस्या में मैंने दूसरे को जोड़ा सवाल)। उत्तर को स्वीकार करते हुए यह एक अच्छा कारण देता है कि मुझे रूपांतरण करने से क्यों बचना चाहिए। –

11
int h = (t/3600) % 24; /* ### Your problem. */ 
+0

दोह, मैंने यह स्पष्ट क्यों नहीं देखा? –

+0

मुझे लगता है कि हर कोई कभी-कभी एक बग देखता है और उसे नहीं देखता है। यह अक्सर मेरे लिए होता है;) –

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