2009-07-02 16 views
7

समय में समय समारोह epoch के बाद मिलीसेकंड देता है।सी में मध्यरात्रि यूटीसी के बाद से मिलीसेकंड कैसे प्राप्त करूं?

+5

असल में, समय() फ़ंक्शन सेकंड में समय देता है, मिलीसेकंड नहीं, क्योंकि युग (और यह लीप सेकेंड को अनदेखा करता है)। –

उत्तर

5

आप gettimeofday (2) का उपयोग करते हैं जिसे POSIX.1 और BSD में परिभाषित किया गया है।

यह सेकंड्स और माइक्रोसॉन्ड देता है जैसा कि sys/time.h से स्ट्रक्चर टाइमवल में परिभाषित किया गया है।

0

आपको समय मिलने और इसे विभिन्न प्रारूपों में बदलने के लिए पर C कोड उदाहरण मिलेगा।

7

यह एक सरल तरीका है:

time_t seconds_since_midnight = time(NULL) % 86400; 

आधी रात के बाद से लगभग मिलीसेकेंड पाने के लिए, द्वारा 1000

seconds_since_midnight गुणा आप अधिक संकल्प की जरूरत है (विचार करें कि क्या तुम सच में करना), तो आपको करना होगा gettimeofday() जैसे किसी अन्य फ़ंक्शन का उपयोग करें।

0

समन्वित यूनिवर्सल समय (UTC) से (gmtime पर एक नजर डालें) में कनवर्ट करता है सीधे ...

8

यह सटीक तरीका है:

struct timeval tv; 
int msec = -1; 
if (gettimeofday(&tv, NULL) == 0) 
{ 
    msec = ((tv.tv_sec % 86400) * 1000 + tv.tv_usec/1000); 
} 

कि msec में के बाद से मिलीसेकेंड की संख्या का संग्रह किया जायेगा आधी रात। (या -1 यदि कोई त्रुटि समय हो रही है। था) एक int में यद्यपि यह आमतौर पर एक बुरा विचार समय मान संग्रहीत करने के लिए

, मैं एक छोटे से घुड़सवार किया जा रहा हूँ और int संभालने में कम से कम 32-बिट है , और आसानी से सीमा (-1) से 86,400,000 समायोजित कर सकते हैं।

लेकिन मुझे नहीं पता कि यह सभी प्रयासों के लायक है या नहीं।

+1

मुझे पता है कि सी के अनुसार, आपके कोड के साथ कुछ गलत लगता है। शायद आपको पहले से 'msec' घोषित करना चाहिए था,' else' भी इस्तेमाल किया जाना चाहिए था। – ThoAppelsin

+0

@ThoAppelsin अच्छा बिंदु। सही किया। धन्यवाद! – scraimer

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

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