Rust में दिनांकों के साथ कार्य: प्रमुख पुस्तकालयों का अवलोकन
\n\nRust एक सिस्टम प्रोग्रामिंग भाषा है जो सुरक्षा और प्रदर्शन पर बहुत ध्यान देती है। हालांकि, समय क्षेत्रों, लीप सेकंड और प्रारूपों के कारण दिनांकों और समय के साथ कार्य करना हमेशा एक जटिल कार्य होता है। Rust के इकोसिस्टम में कई परिपक्व पुस्तकालय हैं जो इन समस्याओं का समाधान करते हैं। इस लेख में, हम तीन मुख्य पुस्तकालयों पर विचार करेंगे: chrono, time और jiff, और दिखाएंगे कि व्यवहार में उनका उपयोग कैसे करें।
\n\n1. Chrono — मुख्य मानक
\nchrono Rust में दिनांकों के साथ कार्य करने के लिए सबसे लोकप्रिय पुस्तकालय है। यह उपकरणों का एक पूरा सेट प्रदान करता है: पार्सिंग, फ़ॉर्मेटिंग, दिनांक अंकगणित, समय क्षेत्रों के साथ कार्य और serde के माध्यम से सीरियलाइज़ेशन।
Cargo.toml के माध्यम से स्थापना:
\n[dependencies]\nchrono = { version = "0.4", features = ["serde"] }\n\nबुनियादी उपयोग का उदाहरण:
\nuse chrono::{NaiveDate, NaiveDateTime, Duration, Utc, Local};\n\nfn main() {\n // UTC में वर्तमान दिनांक और समय\n let utc_now = Utc::now();\n println!("अब UTC में: {}", utc_now.format("%Y-%m-%d %H:%M:%S"));\n\n // स्थानीय समय\n let local_now = Local::now();\n println!("स्थानीय समय: {}", local_now.format("%d.%m.%Y %H:%M"));\n\n // एक विशिष्ट दिनांक बनाना\n let date = NaiveDate::from_ymd_opt(2025, 3, 14).unwrap();\n println!("दिनांक: {}", date);\n\n // दिनांक अंकगणित\n let next_week = date + Duration::days(7);\n println!("एक सप्ताह बाद: {}", next_week);\n\n // स्ट्रिंग पार्स करना\n let parsed = NaiveDateTime::parse_from_str(\n "2025-12-31 23:59:59",\n "%Y-%m-%d %H:%M:%S"\n ).unwrap();\n println!("पार्स किया गया: {}", parsed);\n}\n\n2. Time पुस्तकालय — आधुनिक विकल्प
\ntime एक नया और अधिक कठोर पुस्तकालय है, जिसे chrono की त्रुटियों को ध्यान में रखते हुए विकसित किया गया है। यह प्रकारों के बीच स्पष्ट विभाजन प्रदान करता है: Date, Time, OffsetDateTime और PrimitiveDateTime। यह दिनांकों के सुविधाजनक निर्माण के लिए मैक्रोज़ का समर्थन करता है।
स्थापना:
\n[dependencies]\ntime = { version = "0.3", features = ["macros", "serde"] }\n\nउदाहरण:
\nuse time::{Date, Time, OffsetDateTime, macros::datetime, Duration};\n\nfn main() {\n // वर्तमान समय\n let now = OffsetDateTime::now_utc();\n println!("अब: {}", now);\n\n // मैक्रो के माध्यम से दिनांक बनाना\n let meeting = datetime!(2025-06-15 14:30:00 +03:00);\n println!("बैठक: {}", meeting);\n\n // घटक निकालना\n let date = meeting.date();\n let time = meeting.time();\n println!("दिनांक: {}, समय: {}", date, time);\n\n // अंतर की गणना\n let deadline = datetime!(2025-12-31 00:00:00 UTC);\n let diff = deadline - now;\n println!("समय सीमा तक: {} दिन", diff.whole_days());\n\n // फ़ॉर्मेटिंग\n let formatted = now.format(\n &time::format_description::well_known::Rfc3339\n ).unwrap();\n println!("RFC 3339: {}", formatted);\n}\n\nमहत्वपूर्ण: time पुस्तकालय आधिकारिक Rust-संगठन का हिस्सा है और इसे अधिक सुरक्षित माना जाता है, क्योंकि यह अधिकांश विधियों में पैनिक से बचता है (Result का उपयोग करता है)।
3. Jiff — नया सितारा
\njiff एक अपेक्षाकृत नया पुस्तकालय है जो एर्गोनॉमिक्स और प्रदर्शन पर ध्यान केंद्रित करता है। इसकी मुख्य विशेषता स्वचालित समय क्षेत्र का पता लगाना और कैलेंडर (ग्रेगोरियन, इस्लामिक, यहूदी) के लिए अंतर्निहित समर्थन है।
स्थापना:
\n[dependencies]\njiff = "0.1"\n\nउपयोग का उदाहरण:
\nuse jiff::{Zoned, Timestamp, Unit};\n\nfn main() {\n // समय क्षेत्र के साथ वर्तमान समय\n let now = Zoned::now();\n println!("वर्तमान समय: {}", now);\n\n // timestamp से निर्माण\n let ts = Timestamp::new(1_700_000_000, 0