Rust में दिनांक और समय के साथ काम करने का परिचय
दिनांक और समय के साथ काम करना अधिकांश आधुनिक अनुप्रयोगों में एक प्रमुख कार्य है। चाहे वह इवेंट लॉगिंग हो, डेडलाइन की गणना हो, API से टाइमस्टैम्प प्रोसेस करना हो या कैलेंडर के साथ काम करना हो - समय के साथ काम करने के लिए एक गुणवत्तापूर्ण लाइब्रेरी के बिना काम नहीं चलता। Rust इकोसिस्टम में, मानक लाइब्रेरी केवल बुनियादी क्षमताएँ प्रदान करती है (std::time::Instant और std::time::Duration), जो प्रदर्शन मापने के लिए तो उपयुक्त हैं, लेकिन कैलेंडर दिनांकों के साथ पूर्ण कार्य के लिए नहीं।
इस समस्या का समाधान करता है क्रेट chrono - जो Rust में दिनांक और समय के साथ काम करने का डी-फैक्टो मानक है। यह व्यापक कार्यक्षमता प्रदान करता है: सरल दिनांक बनाने से लेकर टाइमज़ोन, फ़ॉर्मेटिंग और अंकगणित के साथ काम करने तक। इस लेख में हम chrono की प्रमुख क्षमताओं का विस्तार से विश्लेषण करेंगे, व्यावहारिक उदाहरण देंगे और सामान्य गलतियों से बचने का तरीका बताएंगे।
1. chrono की स्थापना और मुख्य प्रकार
शुरू करने के लिए, अपने Cargo.toml में निर्भरता जोड़ें:
[dependencies]chrono = "0.4"इसके बाद आप आवश्यक प्रकारों को आयात कर सकते हैं। Chrono दिनांक और समय को प्रस्तुत करने के लिए तीन मुख्य प्रकार प्रदान करता है:
NaiveDate— बिना समय के दिनांक (वर्ष, महीना, दिन)।NaiveDateTime— बिना टाइमज़ोन के दिनांक और समय।DateTime<Tz>— टाइमज़ोन से जुड़ा दिनांक और समय (उदाहरण के लिए,UtcयाLocal)।
आइए इन प्रकारों को बनाने का एक सरल उदाहरण देखें:
use chrono::{NaiveDate, NaiveDateTime, DateTime, Utc, Local};
fn main() { // एक नेव दिनांक बनाएँ (बिना समय के) let date = NaiveDate::from_ymd_opt(2025, 10, 15).unwrap(); println!("दिनांक: {}", date);
// एक नेव समय बनाएँ (बिना दिनांक के) let time = NaiveTime::from_hms_opt(14, 30, 0).unwrap(); println!("समय: {}", time);
// NaiveDateTime में संयोजित करें let naive_dt = NaiveDateTime::new(date, time); println!("नेव डेटटाइम: {}", naive_dt);
// UTC और स्थानीय समय में वर्तमान समय let now_utc: DateTime<Utc> = Utc::now(); let now_local: DateTime<Local> = Local::now(); println!("अब UTC: {}", now_utc); println!("अब स्थानीय: {}", now_local);}from_ymd_opt और from_hms_opt के उपयोग पर ध्यान दें - ये Option लौटाते हैं, जो अमान्य दिनांक (जैसे 32 जनवरी) बनाने से बचाता है।
2. दिनांकों का फ़ॉर्मेटिंग और पार्सिंग
Chrono स्पेसिफ़ायर पर आधारित एक शक्तिशाली फ़ॉर्मेटिंग सिस्टम का उपयोग करता है, जो C/PHP के strftime से काफी मिलता-जुलता है। यह दिनांकों को स्ट्रिंग में और वापस बदलने की लचीली क्षमता प्रदान करता है।
2.1 दिनांक को स्ट्रिंग में फ़ॉर्मेट करना
use chrono::{Utc, DateTime};
fn main() { let now: DateTime<Utc> = Utc::now(); // मानक ISO 8601 println!("ISO: {}", now.to_rfc3339()); // कस्टम फ़ॉर्मेट println!("कस्टम: {}", now.format("%Y-%m-%d %H:%M:%S")); println!("सप्ताह का दिन: {}", now.format("%A")); println!("महीना: {}", now.format("%B")); println!("वर्ष-महीना-दिन: {}", now.format("%d.%m.%Y"));}मुख्य फ़ॉर्मेटिंग स्पेसिफ़ायर:
%Y— वर्ष (4 अंक)%m— महीना (01-12)%d— महीने का दिन (01-31)%H— घंटे (00-23)%M— मिनट (00-59)%S— सेकंड (00-60)%A— सप्ताह के दिन का पूरा नाम%B— महीने का पूरा नाम
2.2 स्ट्रिंग को दिनांक में पार्स करना
विपरीत रूपांतरण के लिए parse_from_str विधि का उपयोग किया जाता है:
use chrono::{NaiveDateTime, DateTime, Utc, format::ParseResult};