Swift में दिनांक और समय के साथ कार्य: उन्नत तकनीकें

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

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

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

Swift में दिनांक और समय के साथ उन्नत कार्य



दिनांक और समय के साथ कार्य करना iOS/macOS विकास में एक प्रमुख कार्य है। बुनियादी स्तर पर, अधिकांश डेवलपर्स Date, DateFormatter और Calendar से परिचित हैं। हालाँकि, उन्नत स्तर पर जटिल परिदृश्य उत्पन्न होते हैं: समय क्षेत्रों के साथ कार्य, सैकड़ों दिनांकों को पार्स करते समय उच्च प्रदर्शन, सापेक्ष समय का सही प्रदर्शन और कस्टम प्रारूपों का प्रसंस्करण। इस लेख में, हम Swift में दिनांकों के साथ काम करने की उन्नत तकनीकों पर चर्चा करेंगे जो आपको अधिक विश्वसनीय और कुशल कोड लिखने में मदद करेंगी।



1. दिनांक पार्सिंग का अनुकूलन: DateFormatter बनाम ISO8601DateFormatter



सबसे सामान्य संक्रियाओं में से एक है स्ट्रिंग को दिनांक में परिवर्तित करना। मानक DateFormatter सुविधाजनक है, लेकिन इसे बनाना एक महँगी संक्रिया है। यदि आप लूप में सैकड़ों दिनांक पार्स कर रहे हैं, तो DateFormatter() का प्रत्येक कॉल एक नया ऑब्जेक्ट बनाता है, जिससे प्रदर्शन में गिरावट आती है।



समस्या: लूप में DateFormatter बनाना

// ❌ खराब: लूप में फ़ॉर्मेटर बनानाfor dateString in dateStrings {    let formatter = DateFormatter()    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"    if let date = formatter.date(from: dateString) {        // प्रसंस्करण    }}


समाधान: कैशिंग और ISO8601DateFormatter

ISO 8601 प्रारूप के लिए ISO8601DateFormatter का उपयोग करें - यह तेज़ और थ्रेड-सुरक्षित है। कस्टम प्रारूपों के लिए, फ़ॉर्मेटर को एक बार बनाएँ और पुनः उपयोग करें।



// ✅ अच्छा: फ़ॉर्मेटर को कैश करनाprivate let isoFormatter: ISO8601DateFormatter = {    let formatter = ISO8601DateFormatter()    formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]    return formatter}()

// कस्टम प्रारूपों के लिएprivate let customFormatter: DateFormatter = { let formatter = DateFormatter() formatter.dateFormat = "dd.MM.yyyy HH:mm" formatter.locale = Locale(identifier: "ru_RU") formatter.timeZone = TimeZone(secondsFromGMT: 0) return formatter}()

func parseDates(_ strings: [String]) -> [Date] { return strings.compactMap { isoFormatter.date(from: $0) }}


महत्वपूर्ण: DateFormatter थ्रेड-सुरक्षित नहीं है। यदि आप मल्टीथ्रेडिंग के साथ काम कर रहे हैं, तो Thread.current का उपयोग करें या प्रत्येक थ्रेड के लिए एक अलग फ़ॉर्मेटर बनाएँ।



2. समय क्षेत्रों और DateComponents के साथ कार्य



दिनांकों के साथ उन्नत कार्य के लिए समय क्षेत्रों पर विचार करना आवश्यक है। Swift में Date एक निरपेक्ष समय बिंदु है (1 जनवरी 2001 से सेकंड की संख्या)। समय क्षेत्र के बारे में सारी जानकारी Calendar और DateFormatter में रहती है।



एक विशिष्ट समय क्षेत्र में दिनांक घटक निकालना

let date = Date()let calendar = Calendar.currentlet timeZone = TimeZone(identifier: "America/New_York")!

// निर्दिष्ट समय क्षेत्र के लिए घटक प्राप्त करेंvar components = calendar.dateComponents(in: timeZone, from: date)components.hour // न्यूयॉर्क में घंटाcomponents.day // न्यूयॉर्क में दिन

// स्पष्ट timeZone निर्दिष्ट करके घटकों से दिनांक बनानाvar newComponents = DateComponents()newComponents.year = 2024newComponents.month = 12newComponents.day = 25newComponents.hour = 10newComponents.minute = 30newComponents.timeZone = TimeZone(identifier: "Europe/Moscow")

let christmasDate = calendar.date(from: newComponents)print(christmasDate!) // 2024-12-25 07:30:00 +0000 (UTC)


कैलेंडर के साथ दिनांकों की तुलना

दिन, घंटा या मिनट तक सटीकता के साथ तुलना करने के लिए compare(_:to:toGranularity:) का उपयोग करें:



let date1 = Date()let date2 = Date().addingTimeInterval(3600) // +1 घंटा

let result = calendar.compare(date1, to: date2, toGranularity: .hour)// .orderedSame, यदि एक ही घंटे में// .orderedAscending, यदि date1 पहले है


<

ब्लॉग

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