C++ में दिनांक और समय के साथ कार्य: <ctime> से आधुनिक <chrono> तक
दिनांक और समय के साथ कार्य किसी भी गंभीर एप्लिकेशन में मुख्य कार्यों में से एक है: लॉग और बैकअप से लेकर टाइमर और वित्तीय गणनाओं तक। C++ में ऐतिहासिक रूप से दो दृष्टिकोण विकसित हुए हैं: क्लासिक C-शैली हेडर फ़ाइल <ctime> के माध्यम से और आधुनिक, टाइप-सुरक्षित दृष्टिकोण <chrono> लाइब्रेरी के माध्यम से, जो C++11 में दिखाई दी और C++20 में काफी विस्तारित हुई। इस लेख में, हम दोनों विधियों का विश्लेषण करेंगे, वर्तमान समय प्राप्त करना, अंतराल मापना, दिनांकों को फ़ॉर्मेट करना और सामान्य गलतियों से बचना सीखेंगे।
1. क्लासिक तरीका: <ctime> और std::time_t
C++11 से पहले, समय के साथ कार्य करने का एकमात्र मानक तरीका C के फ़ंक्शन थे: time(), localtime(), strftime()। यह दृष्टिकोण अभी भी लीगेसी कोड और सरल कार्यों में उपयोग किया जाता है।
वर्तमान समय प्राप्त करना
फ़ंक्शन std::time(nullptr) 1 जनवरी 1970 (Unix-युग) से सेकंड की संख्या को std::time_t पूर्णांक के रूप में लौटाता है।
#include <iostream>#include <ctime>
int main() { std::time_t now = std::time(nullptr); std::cout << "वर्तमान समय (युग से सेकंड): " << now << std::endl; return 0;}पठनीय प्रारूप में रूपांतरण
घटकों (वर्ष, महीना, दिन, घंटे आदि) के साथ संरचना प्राप्त करने के लिए, std::localtime() या std::gmtime() का उपयोग करें।
#include <iostream>#include <ctime>
int main() { std::time_t now = std::time(nullptr); std::tm* local = std::localtime(&now);
std::cout << "वर्ष: " << (local->tm_year + 1900) << std::endl; std::cout << "महीना: " << (local->tm_mon + 1) << std::endl; std::cout << "दिन: " << local->tm_mday << std::endl; return 0;}strftime के साथ स्ट्रिंग फ़ॉर्मेटिंग
फ़ंक्शन std::strftime() आपको दिए गए टेम्पलेट के अनुसार दिनांक को एक स्ट्रिंग में लचीले ढंग से फ़ॉर्मेट करने की अनुमति देता है।
#include <iostream>#include <ctime>
int main() { std::time_t now = std::time(nullptr); std::tm* local = std::localtime(&now);
char buffer[80]; std::strftime(buffer, sizeof(buffer), "%d.%m.%Y %H:%M:%S", local); std::cout << "वर्तमान दिनांक और समय: " << buffer << std::endl; return 0;}⚠️ महत्वपूर्ण: std::localtime() और std::gmtime() एक स्थिर बफर के लिए पॉइंटर लौटाते हैं — यह थ्रेड-सुरक्षित नहीं है। C++11 में रीएंट्रेंट संस्करण localtime_s (Windows) या localtime_r (POSIX) दिखाई दिए।
2. आधुनिक C++: <chrono> लाइब्रेरी
<chrono> लाइब्रेरी सख्त टाइपिंग, विभिन्न समय इकाइयों के साथ कार्य और उच्च सटीकता प्रदान करती है। मुख्य घटक:
- घड़ियाँ (clocks):
system_clock,steady_clock,high_resolution_clock - समय बिंदु (time_point): एक विशिष्ट क्षण से संबंध
- अवधि (duration): समय अंतराल (सेकंड, मिलीसेकंड आदि)
वर्तमान क्षण प्राप्त करना
#include <iostream>#include <chrono>#include <ctime> // std::time_t के लिए
int main() { auto now = std::chrono::system_clock::now(); std::time_t now_time = std::chrono::system_clock::to_time_t(now); std::cout << "वर्तमान समय: " << std::ctime(&now_time); return 0;}समय अंतराल मापना (टाइमर)
सबसे सामान्य कार्यों में से एक कोड के निष्पादन समय को मापना है। इसके लिए आदर्श रूप से प