यदि संभव हो तो आपको tm_isdst -1 को सेट करने से बचना चाहिए। प्रणाली हमेशा दिनांक और समय से डीएसटी स्थिति निर्धारित नहीं कर सकती है। डीएसटी समाप्त होने से पहले और बाद में यह संदिग्ध है। उदाहरण के लिए, यदि आप mktime()
1:30 पूर्वाह्न 4 नवंबर, 2012 को पास करते हैं, तोसे सही time_t
मान प्राप्त करने के लिए पर्याप्त जानकारी नहीं है। आम तौर पर मैंने देखा है कि mktime()
इस मामले में मानक समय मानता है कि यह संदिग्ध है, लेकिन मैंने कोई भी दस्तावेज नहीं देखा है जो सभी प्लेटफार्मों पर व्यवहार की गारंटी देता है। 1:30 पूर्वाह्न 4 नवंबर, 2012 tm_isdst == 1
के साथ 1 घंटा पहले होगा, क्योंकि घंटा 1:00:00 से 1:59:59 दोहराया जाता है।
#include <stdio.h>
#include <time.h>
int main()
{
time_t daylight, standard;
struct tm timestr;
double diff;
timestr.tm_year = 2012 - 1900;
timestr.tm_mon = 11 - 1;
timestr.tm_mday = 4;
timestr.tm_hour = 1;
timestr.tm_min = 30;
timestr.tm_sec = 0;
/* first with standard time */
timestr.tm_isdst = 0;
standard = mktime(×tr);
/* now with daylight time */
timestr.tm_isdst = 1;
daylight = mktime(×tr);
diff = difftime(standard, daylight);
printf("Difference is %f hour(s)", diff/60.0/60.0);
return 0;
}
यह पैदा करता है:
Difference is 1.000000 hour(s)
दोनों, 2012 1:30 पूर्वाह्न, 4 नवंबर हैं लेकिन दोनों दो अलग टाइम_टी मूल्यों, 1 घंटे का अंतर है।
- टाइम_टी
- मरम्मत समय struct
समय struct दोनों एक इनपुट और आउटपुट है:
mktime()
अनिवार्य रूप से 2 outputs है। यह सभी संरचना सदस्यों को नाममात्र श्रेणियों में वापस करने के लिए mktime()
द्वारा संशोधित किया गया है। उदाहरण के लिए, यदि आप tm_hour सदस्य += 500
बढ़ाते हैं, तो इसका मतलब है कि 500 घंटे तक समय बढ़ाएं। tm_hour
सदस्य को 00 से 59 के मूल्य में बदल दिया जाएगा, और tm_day
, tm_mday
, और आदि सभी तदनुसार समायोजित किए जाएंगे। tm_isdst
दोनों इनपुट और आउटपुट भी है।
- 1 (प्रभाव में डीएसटी, अर्थात डेलाइट समय)
- 0 (डीएसटी नहीं प्रभाव में है, अर्थात: अपने मूल्यों को इस प्रकार हैंमानक समय)
- -1 (अज्ञात डीएसटी स्थिति)
तो mktime() होगा उत्पादन या तो एक 1 या tm_isdst के लिए 0, कभी नहीं -1।
-1 एक संभावित इनपुट है, लेकिन मैं इसे "अज्ञात" के रूप में सोचूंगा। इसका अर्थ "स्वचालित रूप से निर्धारित करें" के रूप में मत सोचें, क्योंकि सामान्य रूप से, mktime()
हमेशा इसे स्वचालित रूप से निर्धारित नहीं कर सकता है।
स्पष्ट डीएसटी स्थिति (0 या 1) सॉफ़्टवेयर के बाहर बाहरी से कुछ आनी चाहिए, उदाहरण के लिए इसे फ़ाइल या डेटाबेस में संग्रहीत करें, या उपयोगकर्ता को संकेत दें।
ठीक है अगर आपको डीएसटी नहीं पता है तो आपको इसे स्वयं निर्धारित करने की आवश्यकता है (इसके साथ शुभकामनाएं), या इसे '-1' पर सेट करें। कोई अन्य विकल्प नहीं है। यदि आप इसे 0 पर सेट करते हैं, तो आपको किसी भी डीएसटी को ग़लत गारंटी नहीं है, अगर आप इसे 1 पर सेट करते हैं तो आप डीएसटी को मजबूर करते हैं जिस पर भी गलत गारंटी है। – rustyx
@RustyX हार्ड कोडिंग -1, 0, या 1 हमेशा गलत होगा। -1 कम से कम बुरा है, लेकिन अभी भी बुरा है। स्पष्ट स्थिति (0 या 1) उपयोगकर्ता से सॉफ़्टवेयर में _input_ होना चाहिए, या डेटा (फ़ाइल या डेटाबेस) में संग्रहीत होना चाहिए। असल में यह एप्लिकेशन के बाहर बाहरी से कुछ आना चाहिए। –
वी अच्छा जवाब। धन्यवाद – drlolly