Date एक Foundation संरचना है जो कैलेंडर और समय क्षेत्र से स्वतंत्र, समय में एक विशिष्ट क्षण का प्रतिनिधित्व करती है। यह प्रकार 1 जनवरी 2001 की संदर्भ तिथि से बीते सेकंड की संख्या संग्रहीत करता है, और समय अंतराल की तुलना और गणना के लिए बुनियादी संचालन प्रदान करता है। Apple Developer Documentation (2025) के अनुसार, Date का उपयोग सभी Apple फ्रेमवर्क में किया जाता है: UIKit और SwiftUI से लेकर CloudKit और Core Data तक। Date के काम करने को समझना किसी भी iOS डेवलपर के लिए आवश्यक है, क्योंकि इसके बिना एप्लिकेशन में समय प्रबंधित करना असंभव है।
मुख्य निष्कर्ष
Date Foundation फ्रेमवर्क से एक वैल्यू प्रकार है जो समय में एक पूर्ण क्षण को कैप्चर करता है। कैलेंडर प्रस्तुतियों (वर्ष, महीना, दिन) के विपरीत, Date समय क्षेत्र या कैलेंडर सिस्टम पर निर्भर नहीं करता — यह पूरी तरह से संख्यात्मक टाइमस्टैम्प मान है।
Date का आंतरिक प्रतिनिधित्व TimeInterval (Double के लिए एक प्रकार उपनाम) है, जो संदर्भ तिथि — 1 जनवरी 2001, 00:00:00 UTC के सापेक्ष सेकंड की संख्या संग्रहीत करता है। Apple ने पुराने NeXTSTEP सिस्टम के साथ संगतता के लिए Unix युग (1970) के बजाय इस तिथि को चुना, जिस पर iOS और macOS बनाए गए हैं।
Date सभी Apple API में मानक समय प्रकार के रूप में उपयोग किया जाता है: UIDatePicker, DatePicker, UserDefaults, Codable, Core Data, CloudKit। Date के बिना, शेड्यूल, टाइमर, कैलेंडर इवेंट, डेटा सीरियलाइज़ेशन और किसी भी समय-संबंधित संचालन के साथ काम करना असंभव है।
Date कैलेंडर प्रकारों से भिन्न है क्योंकि यह मानव-पठनीय मान के बजाय एक भौतिक टाइमस्टैम्प का प्रतिनिधित्व करता है। एक ही Date विभिन्न समय क्षेत्रों में विभिन्न कैलेंडर तिथियों के अनुरूप हो सकता है। घटकों (वर्ष, महीना, दिन) को निकालने के लिए, Date को Calendar और DateComponents के माध्यम से परिवर्तित किया जाता है।
Date DispatchTime से भी भिन्न है, जिसका उपयोग Grand Central Dispatch में कार्य प्रेषण के लिए किया जाता है। DispatchTime सिस्टम बूट समय के सापेक्ष है, जबकि Date एक पूर्ण टाइमस्टैम्प है जिसे सहेजा, प्रेषित और पुनर्स्थापित किया जा सकता है।
Date() वर्तमान समय क्षण के साथ एक ऑब्जेक्ट बनाने का सबसे सरल तरीका है। बिना पैरामीटर वाला आरंभक कॉल का सटीक समय लौटाता है। अतीत या भविष्य में एक तिथि बनाने के लिए, TimeInterval और addingTimeInterval विधि, या मौजूदा Date से आरंभीकरण का उपयोग करें।
घटकों से एक मनमाना तिथि बनाने के लिए, Calendar और DateComponents जोड़ी का उपयोग करें। Calendar मानव-पठनीय घटकों (वर्ष, महीना, दिन, घंटा, मिनट) को Date में परिवर्तित करता है। आप ISO8601DateFormatter के माध्यम से ISO 8601 स्ट्रिंग से, या DateFormatter के माध्यम से एक मनमानी स्ट्रिंग प्रस्तुति से Date आरंभ कर सकते हैं।
Date.distantPast और Date.distantFuture दो स्थैतिक गुण हैं जो अतीत और भविष्य में असीम रूप से दूर के क्षणों का प्रतिनिधित्व करते हैं। इनका उपयोग एल्गोरिदम में तिथियों को फ़िल्टर और सॉर्ट करने के लिए सीमा मान के रूप में किया जाता है।
import Foundation
// वर्तमान समय के साथ Date बनाना
let now = Date()
print("Current time: \(now)")
// 1 घंटे (3600 सेकंड) में तिथि
let inOneHour = now.addingTimeInterval(3600)
// घटकों से तिथि
var components = DateComponents()
components.year = 2025
components.month = 12
components.day = 25
let christmas = Calendar.current.date(from: components)!
उदाहरण Date बनाने के तीन तरीके दिखाता है: वर्तमान समय, अंतराल जोड़ना, और DateComponents के माध्यम से बनाना। तीनों दृष्टिकोण मिलीसेकंड सटीकता के साथ Date प्रकार का मान लौटाते हैं। Calendar.current उपयोगकर्ता के सिस्टम कैलेंडर का उपयोग करता है — Apple उपकरणों पर, यह आमतौर पर ग्रेगोरियन कैलेंडर होता है।
TimeInterval Double के लिए एक प्रकार उपनाम है जो समय के दो क्षणों के बीच सेकंड की संख्या का प्रतिनिधित्व करता है। TimeInterval की सटीकता मिलीसेकंड के अंशों तक पहुँचती है, जो अधिकांश व्यावहारिक कार्यों के लिए पर्याप्त है। नकारात्मक TimeInterval संदर्भ बिंदु के सापेक्ष अतीत को इंगित करता है।
Date सभी मानक तुलना ऑपरेटरों का समर्थन करता है: ==, <, >, <=, >=। Swift स्वचालित रूप से आंतरिक TimeInterval मानों की तुलना करता है। compare विधि अधिक स्पष्ट तुलना के लिए .orderedSame, .orderedAscending, .orderedDescending विकल्पों के साथ ComparisonResult लौटाती है।
Date.distance(to:) एक विधि है जो निर्दिष्ट तिथि तक TimeInterval लौटाती है। यदि लक्ष्य तिथि अतीत में है, तो परिणाम नकारात्मक है। advanced(by:) वर्तमान में निर्दिष्ट TimeInterval जोड़कर एक नई तिथि बनाता है। ये विधियाँ Strideable प्रोटोकॉल को लागू करती हैं, जिससे Date को Range और ClosedRange में उपयोग किया जा सकता है।
let start = Date()
let end = start.addingTimeInterval(86400)
// ऑपरेटरों का उपयोग करके तुलना
if start < end {
print("start is earlier")
}
// दो तिथियों के बीच TimeInterval
let interval: TimeInterval = end.timeIntervalSince(start)
print("Seconds: \(Int(interval / 60)) minutes")
// रेंज में Date का उपयोग
let range = start...end
let mid = start.addingTimeInterval(43200)
if range.contains(mid) {
print("mid is between start and end")
}
86400 का TimeInterval एक दिन के अनुरूप है। अधिक जटिल अंतरालों के लिए — सप्ताह, महीने, वर्ष — Calendar और DateComponents का उपयोग करें, क्योंकि इन इकाइयों की चर लंबाई होती है (लीप वर्ष, डेलाइट सेविंग टाइम)। TimeInterval केवल सेकंड में निश्चित अंतरालों के लिए लागू होता है।
Calendar Date और मानव-पठनीय घटकों के बीच का पुल है। Calendar समय क्षेत्र और लोकेल को ध्यान में रखते हुए Date को DateComponents (वर्ष, महीना, दिन, घंटा, मिनट, सेकंड) में परिवर्तित करता है। Calendar के बिना, Date से वर्ष या महीना निकालना असंभव है — Date अपनी पूर्ण प्रकृति के कारण यह जानकारी नहीं रखता।
Calendar.component विधि Date से एक एकल घटक निकालती है: वर्ष, महीना, दिन, घंटा, मिनट, सेकंड, सप्ताह का दिन, तिमाही। Calendar.dateComponents विधि एक कॉल में घटकों का एक सेट निकालती है — यह प्रत्येक फ़ील्ड के लिए अलग-अलग component कॉल करने की तुलना में अधिक कुशल है।
Calendar.isDateInToday, isDateInTomorrow, isDateInYesterday सापेक्ष तिथियों की जाँच करने के लिए सुविधाजनक विधियाँ हैं। Calendar.dateInterval निर्दिष्ट अवधि (दिन, सप्ताह, महीना, वर्ष) का आरंभ और अंत लौटाता है। Calendar.compare निर्दिष्ट घटक तक सटीकता के साथ तिथियों की तुलना करता है — उदाहरण के लिए, महीने और दिन पर विचार किए बिना वर्ष।
let calendar = Calendar.current
// घटक निकालना
let year = calendar.component(.year, from: Date())
let month = calendar.component(.month, from: Date())
// सापेक्ष तिथि जाँचें
if calendar.isDateInToday(someDate) {
print("Today!")
}
// दिन की शुरुआत और अंत
let dayInterval = calendar.dateInterval(of: .day, for: Date())!
print("Day start: \(dayInterval.start)")
print("Day end: \(dayInterval.end)")
Calendar.current उपयोगकर्ता की सिस्टम सेटिंग्स का उपयोग करता है — कैलेंडर, समय क्षेत्र और लोकेल। परीक्षण या विशिष्ट गणनाओं के लिए, आप Calendar(identifier: .gregorian) के माध्यम से विशिष्ट पैरामीटर के साथ Calendar बना सकते हैं और timeZone गुण के माध्यम से वांछित TimeZone सेट कर सकते हैं।
DateFormatter एक अनिवार्य घटक है यदि Date को उपयोगकर्ता को प्रदर्शित करने की आवश्यकता है। DateFormatter निर्दिष्ट प्रारूप और लोकेल के अनुसार Date को स्ट्रिंग में परिवर्तित करता है। String(describing:) के माध्यम से Date को सीधे स्ट्रिंग में परिवर्तित करना संदर्भ तिथि और TimeInterval के साथ एक तकनीकी प्रस्तुति लौटाता है — यह उपयोगकर्ताओं के लिए अभिप्रेत नहीं है।
मूल दृष्टिकोण पूर्वनिर्धारित शैलियों dateStyle और timeStyle का उपयोग करना है। iOS चार शैलियों का समर्थन करता है: .short, .medium, .long, .full। दिनांक और समय शैलियों का संयोजन लचीला प्रदर्शन कॉन्फ़िगरेशन की अनुमति देता है। DateFormatter स्वचालित रूप से स्थानीयकरण लागू करता है: रूसी लोकेल के लिए, तिथि “21 जुलाई 2026” प्रारूप में प्रदर्शित होगी।
ISO8601DateFormatter ISO 8601 के लिए एक विशेष फ़ॉर्मेटर है, जो API और डेटा विनिमय के लिए सबसे आम प्रारूप है। यह फ़ॉर्मेटर DateFormatter से तेज़ काम करता है और लोकेल पर निर्भर नहीं करता, जो इसे JSON में तिथियों को सीरियलाइज़ करने के लिए बेहतर बनाता है।
// पूर्वनिर्धारित शैलियाँ
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
let userString = formatter.string(from: Date())
// API के लिए ISO 8601
let isoFormatter = ISO8601DateFormatter()
let apiString = isoFormatter.string(from: Date())
// स्ट्रिंग से पार्सिंग
let parsed = isoFormatter.date(from: "2026-07-21T10:30:00Z")!
DateFormatter के साथ काम करते समय, प्रदर्शन को याद रखना महत्वपूर्ण है: एक नया फ़ॉर्मेटर बनाना एक महँगा ऑपरेशन है। फ़ॉर्मेटर को कैश करने या इसे एक बार बनाकर पुनः उपयोग करने की अनुशंसा की जाती है। फ़ॉर्मेटर के गुण timeZone सेट करने की अनुमति देते हैं — डिफ़ॉल्ट रूप से सिस्टम समय क्षेत्र का उपयोग किया जाता है, लेकिन सर्वर तिथियों के लिए अक्सर TimeZone(identifier: “UTC”) की आवश्यकता होती है।
आइए iOS एप्लिकेशन में Date के साथ काम करने के विशिष्ट परिदृश्यों पर विचार करें। पहला परिदृश्य उपयोगकर्ता की जन्म तिथि से आयु की गणना करना है। दूसरा किसी घटना के लिए उलटी गिनती टाइमर है। तीसरा तालिका अनुभागों के रूप में प्रदर्शित करने के लिए रिकॉर्ड को तिथि के अनुसार समूहित करना है।
Calendar.dateComponents [.year] ध्वज के साथ दो तिथियों के बीच अंतर की गणना करता है। सही समय क्षेत्र सेट करना महत्वपूर्ण है — यदि आप Calendar में timeZone निर्दिष्ट नहीं करते हैं, तो किसी अन्य समय क्षेत्र में आधी रात पार करने के कारण परिणाम एक दिन से भिन्न हो सकता है।
func calculateAge(from birthDate: Date) -> Int {
let calendar = Calendar.current
let now = Date()
let components = calendar.dateComponents(
[.year], from: birthDate, to: now
)
return components.year ?? 0
}
उलटी गिनती टाइमर TimeInterval का उपयोग करके कार्यान्वित किया जाता है। लक्ष्य तिथि और वर्तमान तिथि के बीच अंतर की गणना करें, सेकंड में शेष प्राप्त करें और दिनों, घंटों, मिनटों में परिवर्तित करें। नियमित अपडेट के लिए, 1 सेकंड के अंतराल के साथ Timer का उपयोग करें। @Published गुण वाला ObservableObject SwiftUI को इंटरफ़ेस को स्वचालित रूप से अपडेट करने की अनुमति देता है।
दिनांक के अनुसार समूहीकरण Date को कुंजी के रूप में उपयोग करके शब्दकोश के माध्यम से कार्यान्वित किया जाता है। Calendar.dateInterval(of: .day, for:) तिथि को दिन की शुरुआत में सामान्यीकृत करता है, जिससे आप एक ही दिन से संबंधित रिकॉर्ड को समूहित कर सकते हैं। वही दृष्टिकोण सप्ताह, महीने और वर्ष के लिए काम करता है — बस dateInterval में घटक को .weekOfYear या .month में बदलें।
| परिदृश्य | मुख्य API | नोट्स |
|---|---|---|
| आयु गणना | Calendar.dateComponents | timeZone का ध्यान रखें |
| उलटी गिनती | Date.timeIntervalSince | Timer+Combine |
| दिनांक समूहीकरण | Calendar.dateInterval | दिन तक सामान्यीकृत करें |
| JSON सीरियलाइज़ेशन | ISO8601DateFormatter | Locale प्रभावित नहीं करता |
अक्सर पूछे जाने वाले प्रश्न
Date कैलेंडर और लोकेल से बंधन के बिना समय का एक आंतरिक प्रतिनिधित्व है। स्ट्रिंग उपयोगकर्ता सेटिंग्स पर निर्भर एक स्वरूपित प्रदर्शन है। Date की तुलना, सीरियलाइज़ेशन और गणितीय प्रसंस्करण 100% सटीकता के साथ किया जा सकता है, जबकि स्ट्रिंग प्रस्तुति को हमेशा फ़ॉर्मेटर के माध्यम से पार्सिंग की आवश्यकता होती है।
Date एक पूर्ण टाइमस्टैम्प (संदर्भ तिथि से सेकंड की संख्या) है जो समय क्षेत्र पर निर्भर नहीं करता। समय क्षेत्र एक प्रदर्शन संदर्भ है। UTC और मास्को में एक ही Date एक ही भौतिक क्षण का प्रतिनिधित्व करता है लेकिन अलग-अलग कैलेंडर समय के रूप में प्रदर्शित होता है।
Date मूल रूप से Core Data द्वारा एक विशेषता प्रकार के रूप में समर्थित है। Core Data स्वचालित रूप से Date को स्टोरेज में सीरियलाइज़ करता है। तिथि फ़िल्टरिंग वाले क्वेरी के लिए, तुलना ऑपरेटरों के साथ NSPredicate का उपयोग करें — Core Data SQLite स्तर पर सही ढंग से timezone संभालता है।
CFAbsoluteTime एक Core Foundation प्रकार है जो समान संदर्भ तिथि (1 जनवरी 2001) का उपयोग करता है। Date और CFAbsoluteTime प्रत्यक्ष रूपांतरण के माध्यम से विनिमेय हैं। Date(timeIntervalSinceReferenceDate:) CFAbsoluteTime स्वीकार करता है, और Date.timeIntervalSinceReferenceDate CFAbsoluteTime लौटाता है।
Date में मिलीसेकंड सटीकता है लेकिन iOS/macOS हार्डवेयर सीमाओं के कारण नैनोसेकंड सटीकता की गारंटी नहीं देता। उच्च-सटीक माप के लिए, mach_absolute_time या Swift 5.7+ से ContinuousClock का उपयोग करें, जो हार्डवेयर प्रोसेसर साइकिल काउंटर पर काम करते हैं।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें