Rust में दिनांक और समय के साथ कार्य: उन्नत तकनीकें और पुस्तकालय

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

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

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

Rust में दिनांक और समय के साथ उन्नत कार्य: NaiveDateTime से Timezone तक

\n\n

दिनांक और समय के साथ कार्य बैकएंड डेवलपमेंट, लॉगिंग, वित्तीय प्रणालियों और डेटा प्रोसेसिंग में सबसे सामान्य कार्यों में से एक है। Rust में, मानक पुस्तकालय मूल मॉड्यूल std::time प्रदान करता है, लेकिन गंभीर परियोजनाओं के लिए यह पर्याप्त नहीं है। उन्नत स्तर पर, हम क्रेट chrono का उपयोग करते हैं - जो दिनांक और समय के साथ कार्य के लिए वास्तविक मानक है। इस लेख में, हम जटिल परिदृश्यों पर चर्चा करेंगे: समय क्षेत्रों के साथ कार्य, गैर-मानक प्रारूपों का पार्सिंग, अवधियों के साथ हेरफेर और प्रदर्शन अनुकूलन।

\n\n

1. chrono की स्थापना और मूल संरचना

\n\n

Cargo.toml में निर्भरता जोड़ें:

\n\n
[dependencies]\nchrono = { version = "0.4", features = ["serde"] }
\n\n

उन्नत कार्य के लिए chrono के मुख्य प्रकार:

\n
    \n
  • NaiveDateTime — बिना समय क्षेत्र के दिनांक-समय (स्थानीय)।
  • \n
  • DateTime<Tz> — समय क्षेत्र से जुड़ा दिनांक-समय (उदाहरण के लिए, Utc, Local, FixedOffset)।
  • \n
  • Duration — समय अंतराल (std::time::Duration से भिन्न, ऋणात्मक मानों का समर्थन करता है)।
  • \n
  • TimeDelta — नए संस्करणों में Duration का पर्याय।
  • \n
\n\n

UTC और स्थानीय समय में वर्तमान क्षण बनाने का उदाहरण:

\n\n
use chrono::{Utc, Local, DateTime};\n\nfn main() {\n    let utc_now: DateTime<Utc> = Utc::now();\n    let local_now: DateTime<Local> = Local::now();\n    println!("UTC: {}", utc_now);\n    println!("Local: {}", local_now);\n}
\n\n

2. समय क्षेत्रों (Timezone) के साथ कार्य

\n\n

chrono की शक्तिशाली विशेषताओं में से एक क्रेट chrono-tz के माध्यम से Olson timezone database का समर्थन है। यह "Europe/Moscow" या "America/New_York" जैसे क्षेत्र नामों के साथ कार्य करने की अनुमति देता है।

\n\n

स्थापित करें:

\n\n
[dependencies]\nchrono = "0.4"\nchrono-tz = "0.8"
\n\n

क्षेत्रों के बीच समय रूपांतरण का उदाहरण:

\n\n
use chrono::{Utc, DateTime, TimeZone};\nuse chrono_tz::Europe::Moscow;\n\nfn main() {\n    let utc_time: DateTime<Utc> = Utc::now();\n    let moscow_time = utc_time.with_timezone(&Moscow);\n    println!("UTC: {}", utc_time);\n    println!("Moscow: {}", moscow_time);\n}
\n\n

महत्वपूर्ण बिंदु: डेटाबेस में हमेशा समय को UTC में संग्रहीत करें, और उपयोगकर्ता को प्रदर्शित करते समय ही स्थानीय समय में बदलें। यह ग्रीष्मकालीन/शीतकालीन समय के भ्रम को रोकता है।

\n\n

2.1. FixedOffset के साथ कार्य

\n\n

यदि आप एक निश्चित ऑफ़सेट जानते हैं (उदाहरण के लिए, +03:00), तो FixedOffset का उपयोग करें:

\n\n
use chrono::{FixedOffset, DateTime, Utc};\n\nfn main() {\n    let offset = FixedOffset::east_opt(3 * 3600).unwrap(); // +03:00\n    let now_utc: DateTime<Utc> = Utc::now();\n    let now_offset = now_utc.with_timezone(&offset);\n    println!("With offset +03:00: {}", now_offset);\n}
\n\n

3. दिनांकों का पार्सिंग और फ़ॉर्मेटिंग (उन्नत तकनीकें)

\n\n

parse_from_str के माध्यम से मानक पार्सिंग के लिए सटीक प्रारूप की आवश्यकता होती है। लेकिन वास्तविक परियोजनाओं में, प्रारूप भिन्न हो सकते हैं (उदाहरण के लिए, विभिन्न प्रणालियों के लॉग)। आइए कई दृष्टिकोणों पर विचार करें।

\n\n

3.1. try_parse के साथ एकाधिक प्रारूप

\n\n

प्रारूपों को पुनरावृत्त करने का उपयोग करें:

\n\n
use chrono::NaiveDateTime;\n\nfn parse_flexible(date_str: &str) -> Option<NaiveDateTime> {\n    let formats = [\n        "%Y-%m-%d %H:%M:%S",\n        "%d/%m/%Y %H:%M",\n        "%Y%m%dT%H%M%S",\n        "%b %d %Y %I:%M:%S%p",\n    ];\n\n    for fmt in &formats {\n        if let Ok(dt) = NaiveDateTime::parse_from_str(date_str, fmt) {\n            return Some(dt);\n        }\n    }\n    None\n}\n\nfn main() {\n    let dates = vec![\n        "2024-03-15 14:30:00",\n        "15/03/2024 14:30",\n        "2                

ब्लॉग

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