C++ में दिनांक के साथ कार्य: आधुनिक लाइब्रेरीज़ का अवलोकन
\n\nदिनांक और समय के साथ कार्य करना सॉफ्टवेयर विकास में प्रमुख कार्यों में से एक है। C++ में लंबे समय तक कोई सुविधाजनक मानक उपकरण नहीं था, जिसके कारण C-फ़ंक्शन (ctime, localtime) या तृतीय-पक्ष समाधानों का उपयोग होता था। हालाँकि, C++11 मानक और उसके बाद के संस्करणों के आगमन के साथ स्थिति में मौलिक परिवर्तन आया है। इस लेख में, हम C++ में दिनांक के साथ कार्य करने के तीन मुख्य दृष्टिकोणों पर विचार करेंगे: मानक लाइब्रेरी std::chrono, हॉवर्ड हिन्नांट (Howard Hinnant) का date.h एक्सटेंशन और शक्तिशाली फ्रेमवर्क Boost.DateTime।
1. मानक लाइब्रेरी std::chrono (C++11 और नया)
\n\nstd::chrono C++ मानक लाइब्रेरी का एक हिस्सा है, जो समय बिंदुओं (time_point), अवधियों (duration) और घड़ियों (clock) को प्रस्तुत करने के लिए प्रकार प्रदान करता है। यह समय अंतराल मापने, टाइमर और उच्च-सटीक विलंबों के साथ कार्य करने के लिए आदर्श है। हालाँकि, C++20 तक इसमें कैलेंडर दिनांक (दिन, महीना, वर्ष) के साथ कार्य करने के लिए सुविधाजनक साधन नहीं थे।
उदाहरण: कोड निष्पादन समय मापना
\n#include <iostream>\n#include <chrono>\n#include <thread>\n\nint main() {\n auto start = std::chrono::high_resolution_clock::now();\n\n // कार्य का अनुकरण\n std::this_thread::sleep_for(std::chrono::milliseconds(500));\n\n auto end = std::chrono::high_resolution_clock::now();\n auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);\n\n std::cout << "निष्पादन समय: " << duration.count() << " मि.से.\\n";\n return 0;\n}\n\nC++20 के साथ, std::chrono में कैलेंडर के लिए समर्थन जोड़ा गया: प्रकार year, month, day, year_month_day और उनके साथ कार्य करने के लिए ऑपरेटर। अब आप लिख सकते हैं:
#include <chrono>\n#include <iostream>\n\nint main() {\n using namespace std::chrono;\n auto today = floor<days>(system_clock::now());\n year_month_day ymd{today};\n std::cout << int(ymd.year()) << "-" \n << unsigned(ymd.month()) << "-" \n << unsigned(ymd.day()) << "\\n";\n return 0;\n}\n\n2. date.h लाइब्रेरी (Howard Hinnant)
\n\nC++20 के आगमन से पहले, डेवलपर्स date.h लाइब्रेरी का सक्रिय रूप से उपयोग करते थे - यह हॉवर्ड हिन्नांट द्वारा लिखित std::chrono के लिए एक एकल-फ़ाइल एक्सटेंशन है। यह दिनांक के साथ कार्य करने के लिए कार्यों का एक पूरा सेट प्रदान करता है: पार्सिंग, फ़ॉर्मेटिंग, दिनांकों के बीच अंतर की गणना, समय क्षेत्रों के साथ कार्य और यहाँ तक कि जूलियन कैलेंडर के लिए समर्थन।
उदाहरण: स्ट्रिंग को दिनांक में पार्स करना
\n#include "date.h"\n#include <iostream>\n#include <sstream>\n\nint main() {\n std::istringstream ss("2025-04-07");\n date::sys_days tp;\n ss >> date::parse("%F", tp); // ISO 8601 प्रारूप\n auto ymd = date::year_month_day{tp};\n std::cout << "वर्ष: " << int(ymd.year()) << "\\n";\n return 0;\n}\n\nउदाहरण: आयु की गणना
\n#include "date.h"\n#include <iostream>\n\nint main() {\n using namespace date;\n auto birth = sys_days{year{1990}/month{1}/day{15}};\n auto today = floor<days>(std::chrono::system_clock::now());\n auto age = today - birth;\n std::cout << "दिनों में आयु: " << age.count() << "\\n";\n // वर्षों में आयु (लगभग)\n auto years = duration_cast<std::chrono::years>(age);\n std::cout << "वर्षों में आयु: " << years.count() << "\\n";\n return 0;\n}\n\ndate.h लाइब्रेरी आसानी से जुड़ जाती है (हेडर फ़ाइल को कॉपी करना पर्याप्त है) और इसे बिल्ड करने की आवश्यकता नहीं है। यह C++2
पुस्तकालय में भी
Node.js में Markdown प्रोसेसिंग: marked, showdown और remarkable लाइब्रेरी
Go (Golang) मानक पुस्तकालय: एक संपूर्ण अवलोकन