C++ में दिनांक और समय के साथ उन्नत कार्य: chrono, time_t और पार्सिंग

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: C++ में समय के साथ मानक कार्य अधिक जटिल (और बेहतर) क्यों हो गया

\n

लंबे समय तक, C++ में दिनांक और समय के साथ कार्य <ctime> के फ़ंक्शनों तक सीमित था: time(), localtime(), strftime()। यह सरल कार्यों के लिए पर्याप्त था, लेकिन परियोजनाओं की जटिलता बढ़ने (वितरित सिस्टम, उच्च-लोड सर्वर, वित्तीय अनुप्रयोग) के साथ, अधिक सटीक, सुरक्षित और सुविधाजनक उपकरणों की आवश्यकता हुई।

\n

C++11 मानक ने हमें <chrono> लाइब्रेरी दी, जो ओवरफ्लो, माप की इकाइयों में भ्रम और प्लेटफ़ॉर्म-निर्भरता की समस्याओं को हल करती है। C++20 ने समय क्षेत्रों, कैलेंडर प्रकारों और std::format के माध्यम से फ़ॉर्मेटिंग का समर्थन जोड़कर एक महत्वपूर्ण कदम आगे बढ़ाया। इस लेख में, हम उन्नत तकनीकों पर विचार करेंगे जो सामान्य वर्तमान समय प्राप्त करने से परे हैं।

\n\n

1. chrono लाइब्रेरी: मिलीसेकंड से नैनोसेकंड और कैलेंडर तक

\n

std::chrono का मूल तीन घटक हैं: घड़ी (clock), अवधि (duration) और समय बिंदु (time_point)। उन्नत स्तर पर, सही घड़ी चुनना और समय अंकगणित के साथ काम करना महत्वपूर्ण है।

\n\n

1.1. घड़ी का चयन: system_clock, steady_clock, high_resolution_clock

\n
    \n
  • system_clock — सिस्टम समय (कैलेंडर) का प्रतिनिधित्व करता है। इसे उपयोगकर्ता या सिंक्रोनाइज़ेशन सेवा (NTP) द्वारा समायोजित किया जा सकता है। उपयोगकर्ता को दिनांक प्रदर्शित करने के लिए उपयोग किया जाता है।
  • \n
  • steady_clock — मोनोटोनिक घड़ी। कभी पीछे नहीं जाती (no rollback)। अंतराल मापने (टाइमर, प्रोफाइलिंग) के लिए आदर्श।
  • \n
  • high_resolution_clock — सबसे छोटे संभव टिक वाली घड़ी। अधिकांश प्लेटफ़ॉर्म पर यह steady_clock का पर्याय है।
  • \n
\n

उन्नत सलाह: यदि आपको स्थिरता चाहिए तो प्रोफाइलिंग के लिए कभी भी high_resolution_clock का उपयोग न करें। steady_clock का उपयोग करें।

\n\n

1.2. duration और time_point के साथ कार्य

\n

उन्नत कार्य का अर्थ केवल समय मापना नहीं है, बल्कि इकाइयों के बीच रूपांतरण, अंकगणित और कस्टम प्रकार भी शामिल हैं।

\n
#include <iostream>\n#include <chrono>\n#include <thread>\n\nint main() {\n    using namespace std::chrono_literals; // ms, s, us प्रत्ययों के लिए\n\n    // duration का उन्नत निर्माण\n    auto work_time = 2h + 30min + 15s; // 2 घंटे 30 मिनट 15 सेकंड\n    std::cout << "सेकंड में कार्य समय: " << work_time.count() << " s\\n";\n\n    // राउंडिंग के साथ रूपांतरण (duration_cast)\n    auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(work_time);\n    std::cout << "मिलीसेकंड में: " << ms.count() << " ms\\n";\n\n    // फ़ंक्शन निष्पादन समय मापना\n    auto start = std::chrono::steady_clock::now();\n    std::this_thread::sleep_for(100ms); // कार्य का अनुकरण\n    auto end = std::chrono::steady_clock::now();\n    auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start);\n    std::cout << "फ़ंक्शन ने लिया: " << elapsed.count() << " µs\\n";\n\n    return 0;\n}
\n\n

1.3. कैलेंडर प्रकार (C++20)

\n

C++20 ने year_month_day, year_month, weekday और अन्य जोड़े। यह कच्ची संख्याओं के साथ काम किए बिना सुरक्षित रूप से दिनांकों में हेरफेर करने की अनुमति देता है।

\n
#include <iostream>\n#include <chrono>\n\nint main() {\n    using namespace std::chrono;\n\n    // दिनांक बनाना\n    auto date = 2023y / October / 15d; // 15 अक्टूबर 2023\n    std::cout << "दिनांक: " << date << '\\n';\n\n    // दिन जोड़ना\n    auto next_week = date + days(7);\n    std::cout << "एक सप्ताह बाद: " << next_week << '\\n';\n\n    // सप्ताह का दिन प्राप्त करना\n    weekday wd{date};\n    std::cout <&l                

ब्लॉग

पुस्तक अनुशंसाएँ