जब आप mktime() को कॉल करते हैं, तो 1 फरवरी 31 से पहले आता है। यह क्यों है? क्या मैं कुछ गलत कर रहा हूं या यह ग्लिब में एक बग है?लिनक्स-x64 glibc: 1 फरवरी 31 से पहले क्यों आता है?
कोड यह रहा:
struct tm tm;
time_t tt;
memset(&tm, 0, sizeof(tm));
tm.tm_year = 2011;
tm.tm_mon = 1;
tm.tm_mday = 31;
tm.tm_hour = 11;
tm.tm_min = 41;
tm.tm_sec = 28;
tm.tm_isdst = 0;
tt = mktime(&tm);
printf("Time now %d-%d-%d %d:%d:%d (%s) = %lu\n",
tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_zone, tt);
memset(&tm, 0, sizeof(tm));
tm.tm_year = 2011;
tm.tm_mon = 2;
tm.tm_mday = 1;
tm.tm_hour = 1;
tm.tm_min = 1;
tm.tm_sec = 1;
tm.tm_isdst = 0;
tt = mktime(&tm);
printf("Time now %d-%d-%d %d:%d:%d (%s) = %lu\n",
tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_zone, tt);
और यहाँ उत्पादन है:
Time now 2011-2-3 11:41:28 (PST) = 61257325288
Time now 2011-2-1 1:1:1 (PST) = 61257114061
ध्यान दें कि मूल इरादा दो टाइम_टी की तुलना करने के लिए किया गया था। यह समस्या पहली तारीख/समय को दूसरे की तुलना में बाद में दिखाई देती है, जो स्पष्ट रूप से एक समस्या का थोड़ा सा है।
यह सिर्फ "gcc test.c" के साथ संकलित है और उबंटू 9 .10 पर "./a.out" के साथ चलाया गया है, जीसीसी संस्करण 4.4.1 (उबंटू 4.4.1-4ubuntu8), libc-2.10.1-0ubuntu15
32-बिट सिस्टम पर परिणाम अपेक्षित हैं - यानि 64 बिट परिणाम के लिए पूरी तरह से अलग!
क्या कोई इस परिणाम की पुष्टि/खंडन करने की देखभाल करेगा और/या कुछ गलत बता सकता है कि मैं क्या गलत कर रहा हूं?
बस बोलते हुए, 31 फरवरी (जो वास्तव में 3 मार्च या 2 मार्च है) 1 मार्च से बाद में है। – grep
धन्यवाद जिम - एक दोपहर का क्षण;) यह सुनिश्चित नहीं है कि आरटीएफएम के कई बार बाद में मुझे कैसे याद आया! –
@ पॉल - हम सभी के पास ये क्षण हैं - मुझे याद रखने की अपेक्षा अधिक है :-) –