C++ में दिनांक और समय के साथ उन्नत कार्य: chrono से टाइमज़ोन तक
\n\nदिनांक और समय के साथ काम करना हाई-लोड सिस्टम, लॉगिंग, फाइनेंशियल ऐप और शेड्यूलर बनाने में एक मुख्य कार्य है। C++ स्टैंडर्ड लाइब्रेरी में सरल time_t से लेकर आधुनिक <chrono> तक शक्तिशाली टूल्स मौजूद हैं। इस लेख में हम उन्नत तकनीकों को समझेंगे: सटीक माप, टाइमज़ोन, फ़ॉर्मेटिंग और अंतराल की गणना।
1. chrono लाइब्रेरी: duration, time_point और clocks
\n\nस्टैंडर्ड लाइब्रेरी <chrono> (C++11 और नए) समय के पलों (time_point), अवधियों (duration) और घड़ियों (clock) को दर्शाने के लिए टाइप प्रदान करती है। इससे प्लेटफ़ॉर्म-इंडिपेंडेंट कोड लिखना आसान हो जाता है।
#include <iostream>\n#include <chrono>\n#include <thread>\n\nint main() {\n using namespace std::chrono;\n\n // शुरुआती समय नोट करें\n auto start = high_resolution_clock::now();\n\n // काम का अनुकरण\n std::this_thread::sleep_for(milliseconds(500));\n\n auto end = high_resolution_clock::now();\n\n // अवधि की गणना करें\n auto duration = duration_cast<milliseconds>(end - start);\n std::cout << "बीता समय: " << duration.count() << " मि.से.\\n";\n\n // अलग-अलग इकाइयों में duration के साथ काम करना\n seconds sec(1);\n milliseconds ms = sec; // अंतर्निहित रूपांतरण (बिना नुकसान)\n // milliseconds ms2 = duration_cast<milliseconds>(sec); // स्पष्ट\n std::cout << "1 सेकंड = " << ms.count() << " मि.से.\\n";\n\n return 0;\n}\n\nमुख्य बिंदु:
\n- \n
duration_cast— इकाइयों के बीच रूपांतरण (सटीकता कम हो सकती है)। \n high_resolution_clock— सबसे सटीक घड़ी (आमतौर पर सिस्टम टाइमर का रैपर)। \n system_clock— सिस्टम का समय, कैलेंडर से जुड़ा हुआ। \n steady_clock— मोनोटोनिक घड़ी, अंतराल मापने के लिए आदर्श। \n
2. सिस्टम समय और कैलेंडर तिथियों में रूपांतरण
\n\nकैलेंडर तिथियों (वर्ष, महीना, दिन) के साथ काम करने के लिए system_clock और to_time_t / from_time_t फ़ंक्शन का उपयोग करें। C++20 से अधिक सुविधाजनक साधन आए हैं, लेकिन हम क्लासिक तरीका देखेंगे।
#include <iostream>\n#include <chrono>\n#include <ctime>\n\nint main() {\n using namespace std::chrono;\n\n // वर्तमान सिस्टम समय\n auto now = system_clock::now();\n std::time_t now_c = system_clock::to_time_t(now);\n\n // लोकल समय में बदलें\n std::tm* local = std::localtime(&now_c);\n std::cout << "लोकल समय: " \n << std::put_time(local, "%Y-%m-%d %H:%M:%S") << "\\n";\n\n // कैलेंडर तिथि से time_point बनाएं (C++20 इसे सरल करेगा)\n std::tm date = {};\n date.tm_year = 2025 - 1900; // वर्ष 1900 से\n date.tm_mon = 3; // अप्रैल (0-11)\n date.tm_mday = 15;\n date.tm_hour = 12;\n date.tm_min = 30;\n date.tm_sec = 0;\n std::time_t date_c = std::mktime(&date);\n auto date_point = system_clock::from_time_t(date_c);\n\n // दिनों में अंतर\n auto diff = duration_cast<hours>(now - date_point).count() / 24;\n std::cout << "15.04.2025 से दिन: " << diff << "\\n";\n\n return 0;\n}\n\nमहत्वपूर्ण: std::put_time C++11 से उपलब्ध है। फ़ॉर्मेट स्पेसिफ़ायर strftime के समान हैं।
3. टाइमज़ोन और C++20
\n\nC++20 से पहले टाइमज़ोन के साथ काम करना मुश्किल था। C++20 में <chrono> लाइब्रेरी में time_zone और zoned_time का समर्थन जोड़ा गया। यदि आपका कंपाइलर C++20 सपोर्ट करता है (GCC 12+, Clang 15+, MSVC 2022 17.4+), तो आप इसका उपयोग कर सकते हैं।