Date: یہ کیا ہے، Foundation میں وقت کی قسم اور TimeInterval

مصنف: IT Sectr اشاعت: 2026-07-12 مطالعے کا وقت: 7 منٹ

Date ایک Foundation ساخت ہے جو کیلنڈر اور ٹائم زون سے آزاد، وقت میں ایک مخصوص لمحے کی نمائندگی کرتی ہے۔ یہ قسم 1 جنوری 2001 کی حوالہ تاریخ سے گزرے ہوئے سیکنڈز کی تعداد ذخیرہ کرتی ہے، اور وقت کے وقفوں کے موازنہ اور حساب کے لیے بنیادی کارروائیاں فراہم کرتی ہے۔ Apple Developer Documentation (2025) کے مطابق، Date تمام Apple فریم ورکس میں استعمال ہوتی ہے: UIKit اور SwiftUI سے CloudKit اور Core Data تک۔ Date کے کام کرنے کو سمجھنا کسی بھی iOS ڈیویلپر کے لیے ضروری ہے، کیونکہ اس کے بغیر ایپلیکیشن میں وقت کا انتظام کرنا ناممکن ہے۔

اہم نکات

  • Date — ایک Foundation ساخت جو حوالہ تاریخ سے سیکنڈز کی تعداد کے طور پر وقت میں ایک مطلق لمحہ ذخیرہ کرتی ہے۔
  • TimeInterval — سیکنڈز میں دو لمحوں کے درمیان وقفہ ظاہر کرنے کے لیے ایک Double قسم۔
  • Date() — ایک ابتدا کار جو کال کے وقت موجودہ وقت کے لمحے کے ساتھ ایک آبجیکٹ بناتا ہے۔
  • تاریخوں کا موازنہ موازنہ آپریٹرز یا compare، earlierDate، laterDate طریقوں کے ذریعے کیا جاتا ہے۔
  • DateFormatter — صارف کو پڑھنے کے قابل فارمیٹ میں تاریخیں ظاہر کرنے کے لیے ایک لازمی جزو۔

Foundation میں Date کیا ہے؟

Date Foundation فریم ورک سے ایک قدر کی قسم ہے جو وقت میں ایک مطلق لمحے کو گرفت کرتی ہے۔ کیلنڈر کی نمائندگی (سال، مہینہ، دن) کے برعکس، Date ٹائم زون یا کیلنڈر سسٹم پر منحصر نہیں کرتی — یہ خالصتاً ایک عددی ٹائم اسٹیمپ قدر ہے۔

Date کی اندرونی نمائندگی TimeInterval ہے (Double کے لیے ایک قسم کا عرف)، جو حوالہ تاریخ — 1 جنوری 2001، 00:00:00 UTC کے نسبت سے سیکنڈز کی تعداد ذخیرہ کرتا ہے۔ Apple نے پرانے NeXTSTEP سسٹمز کے ساتھ مطابقت کے لیے Unix epoch (1970) کے بجائے یہ تاریخ منتخب کی، جن پر iOS اور macOS بنائے گئے ہیں۔

Date تمام Apple APIs میں معیاری وقت کی قسم کے طور پر استعمال ہوتی ہے: UIDatePicker، DatePicker، UserDefaults، Codable، Core Data، CloudKit۔ Date کے بغیر، نظام الاوقات، ٹائمرز، کیلنڈر واقعات، ڈیٹا سیریلائزیشن اور وقت سے متعلق کسی بھی کارروائی کے ساتھ کام کرنا ناممکن ہے۔

Date بمقابلہ دیگر اوقات کی اقسام

Date کیلنڈر کی اقسام سے اس لحاظ سے مختلف ہے کہ یہ انسانی پڑھنے کے قابل قدر کے بجائے ایک طبعی ٹائم اسٹیمپ کی نمائندگی کرتی ہے۔ ایک ہی Date مختلف ٹائم زونز میں مختلف کیلنڈر تاریخوں کے مطابق ہو سکتی ہے۔ اجزاء (سال، مہینہ، دن) نکالنے کے لیے، Date کو Calendar اور DateComponents کے ذریعے تبدیل کیا جاتا ہے۔

Date DispatchTime سے بھی مختلف ہے، جو Grand Central Dispatch میں کاموں کی تقسیم کے لیے استعمال ہوتا ہے۔ DispatchTime سسٹم بوٹ ٹائم سے نسبت رکھتا ہے، جبکہ Date ایک مطلق ٹائم اسٹیمپ ہے جسے محفوظ، منتقل اور بحال کیا جا سکتا ہے۔

Swift میں Date بنانا

Date() موجودہ وقت کے لمحے کے ساتھ ایک آبجیکٹ بنانے کا سب سے آسان طریقہ ہے۔ بغیر پیرامیٹر کے ابتدا کار کال کا صحیح وقت لوٹاتا ہے۔ ماضی یا مستقبل میں تاریخ بنانے کے لیے، TimeInterval اور addingTimeInterval طریقہ، یا موجودہ Date سے ابتدا کا استعمال کریں۔

اجزاء سے صوابدیدی تاریخ بنانے کے لیے، Calendar اور DateComponents جوڑی کا استعمال کریں۔ Calendar انسانی پڑھنے کے قابل اجزاء (سال، مہینہ، دن، گھنٹہ، منٹ) کو Date میں تبدیل کرتا ہے۔ آپ ISO8601DateFormatter کے ذریعے ISO 8601 سٹرنگ سے، یا DateFormatter کے ذریعے صوابدیدی سٹرنگ نمائندگی سے Date شروع کر سکتے ہیں۔

Date.distantPast اور Date.distantFuture دو جامد خصوصیات ہیں جو ماضی اور مستقبل میں لامحدود دور کے لمحوں کی نمائندگی کرتی ہیں۔ یہ الگورتھم میں تاریخوں کو فلٹر اور ترتیب دینے کے لیے حدی اقدار کے طور پر استعمال ہوتی ہیں۔

swift
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 اور تاریخ کا موازنہ

TimeInterval Double کے لیے ایک قسم کا عرف ہے جو دو لمحوں کے درمیان سیکنڈز کی تعداد ظاہر کرتا ہے۔ TimeInterval کی درستگی ملی سیکنڈ کے کسر تک پہنچتی ہے، جو زیادہ تر عملی کاموں کے لیے کافی ہے۔ منفی TimeInterval حوالہ نقطہ کے نسبت ماضی کی نشاندہی کرتا ہے۔

Date تمام معیاری موازنہ آپریٹرز کو سپورٹ کرتی ہے: ==، <، >، <=، >=۔ Swift خود بخود اندرونی TimeInterval اقدار کا موازنہ کرتا ہے۔ compare طریقہ مزید واضح موازنہ کے لیے .orderedSame، .orderedAscending، .orderedDescending اختیارات کے ساتھ ComparisonResult لوٹاتا ہے۔

Date.distance(to:) ایک طریقہ ہے جو مخصوص تاریخ تک TimeInterval لوٹاتا ہے۔ اگر ہدف تاریخ ماضی میں ہے تو نتیجہ منفی ہوتا ہے۔ advanced(by:) موجودہ تاریخ میں مخصوص TimeInterval شامل کرکے ایک نئی تاریخ بناتا ہے۔ یہ طریقے Strideable پروٹوکول کو لاگو کرتے ہیں، جس سے Date کو Range اور ClosedRange میں استعمال کیا جا سکتا ہے۔

swift
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 اور DateComponents

Calendar Date اور انسانی پڑھنے کے قابل اجزاء کے درمیان پل ہے۔ Calendar ٹائم زون اور لوکیل کو مدنظر رکھتے ہوئے Date کو DateComponents (سال، مہینہ، دن، گھنٹہ، منٹ، سیکنڈ) میں تبدیل کرتا ہے۔ Calendar کے بغیر، Date سے سال یا مہینہ نکالنا ناممکن ہے — Date اپنی مطلق نوعیت کی وجہ سے یہ معلومات نہیں رکھتی۔

Calendar.component طریقہ Date سے ایک جزو نکالتا ہے: سال، مہینہ، دن، گھنٹہ، منٹ، سیکنڈ، ہفتے کا دن، سہ ماہی۔ Calendar.dateComponents طریقہ ایک کال میں اجزاء کا ایک سیٹ نکالتا ہے — یہ ہر فیلڈ کے لیے علیحدہ علیحدہ component بلانے سے زیادہ موثر ہے۔

Calendar.isDateInToday، isDateInTomorrow، isDateInYesterday نسبتی تاریخوں کی جانچ کرنے کے لیے آسان طریقے ہیں۔ Calendar.dateInterval مخصوص مدت (دن، ہفتہ، مہینہ، سال) کا آغاز اور اختتام لوٹاتا ہے۔ Calendar.compare مخصوص جزو تک درستگی کے ساتھ تاریخوں کا موازنہ کرتا ہے — مثال کے طور پر، مہینہ اور دن پر غور کیے بغیر سال۔

swift
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 اور تاریخ کی نمائش

DateFormatter ایک لازمی جزو ہے اگر Date کو صارف کو ظاہر کرنے کی ضرورت ہو۔ DateFormatter مخصوص فارمیٹ اور لوکیل کے مطابق Date کو سٹرنگ میں تبدیل کرتا ہے۔ String(describing:) کے ذریعے Date کو براہ راست سٹرنگ میں تبدیل کرنا حوالہ تاریخ اور TimeInterval کے ساتھ ایک تکنیکی نمائندگی لوٹاتا ہے — یہ صارفین کے لیے نہیں ہے۔

بنیادی طریقہ پہلے سے طے شدہ اسٹائل dateStyle اور timeStyle کا استعمال ہے۔ iOS چار اسٹائل کو سپورٹ کرتا ہے: .short، .medium، .long، .full۔ تاریخ اور وقت کے اسٹائل کا امتزاج لچکدار ڈسپلے کنفیگریشن کی اجازت دیتا ہے۔ DateFormatter خود بخود لوکلائزیشن لاگو کرتا ہے: روسی لوکیل کے لیے، تاریخ “21 جولائی 2026” فارمیٹ میں ظاہر ہوگی۔

ISO8601DateFormatter ISO 8601 کے لیے ایک خصوصی فارمیٹر ہے، جو API اور ڈیٹا کے تبادلے کے لیے سب سے عام فارمیٹ ہے۔ یہ فارمیٹر DateFormatter سے تیزی سے کام کرتا ہے اور لوکیل پر منحصر نہیں ہوتا، جو اسے JSON میں تاریخوں کی سیریلائزیشن کے لیے ترجیحی بناتا ہے۔

swift
// پہلے سے طے شدہ اسٹائل
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”) کی ضرورت ہوتی ہے۔

Date استعمال کی مثالیں

iOS ایپلیکیشن میں Date کے ساتھ کام کرنے کے عام منظرناموں پر غور کریں۔ پہلا منظر نامہ صارف کی تاریخ پیدائش سے عمر کا حساب ہے۔ دوسرا کسی واقعہ کے لیے الٹی گنتی کا ٹائمر ہے۔ تیسرا ٹیبل سیکشنز کے طور پر ظاہر کرنے کے لیے تاریخ کے مطابق ریکارڈز کو گروپ کرنا ہے۔

تاریخ پیدائش سے عمر کا حساب

Calendar.dateComponents [.year] پرچم کے ساتھ دو تاریخوں کے درمیان فرق کا حساب لگاتا ہے۔ صحیح ٹائم زون سیٹ کرنا ضروری ہے — اگر آپ Calendar میں timeZone متعین نہیں کرتے، تو کسی دوسرے ٹائم زون میں آدھی رات عبور کرنے کی وجہ سے نتیجہ ایک دن مختلف ہو سکتا ہے۔

swift
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.dateComponentstimeZone کا خیال رکھیں
الٹی گنتیDate.timeIntervalSinceTimer+Combine
تاریخ کی گروپ بندیCalendar.dateIntervalدن تک نارملائز کریں
JSON سیریلائزیشنISO8601DateFormatterLocale اثر نہیں کرتا

اکثر پوچھے گئے سوالات

Date تاریخ کی سٹرنگ سے کیسے مختلف ہے؟

Date کیلنڈر اور لوکیل سے منسلک کیے بغیر وقت کی ایک اندرونی نمائندگی ہے۔ سٹرنگ صارف کی ترتیبات پر منحصر ایک فارمیٹ شدہ ڈسپلے ہے۔ Date کا 100% درستگی کے ساتھ موازنہ، سیریلائزیشن اور ریاضیاتی پروسیسنگ کیا جا سکتا ہے، جبکہ سٹرنگ نمائندگی کو ہمیشہ فارمیٹر کے ذریعے پارسنگ کی ضرورت ہوتی ہے۔

Date میں ٹائم زون کی معلومات کیوں نہیں ہوتی؟

Date ایک مطلق ٹائم اسٹیمپ (حوالہ تاریخ سے سیکنڈز کی تعداد) ہے جو ٹائم زون پر منحصر نہیں ہوتا۔ ٹائم زون ایک ڈسپلے سیاق و سباق ہے۔ UTC اور ماسکو میں ایک ہی Date ایک ہی طبعی لمحے کی نمائندگی کرتی ہے لیکن مختلف کیلنڈر وقت کے طور پر ظاہر ہوتی ہے۔

Core Data میں وقت ذخیرہ کرنے کے لیے کون سی قسم استعمال کریں؟

Date Core Data کے ذریعے ایک صفت کی قسم کے طور پر مقامی طور پر سپورٹ کی جاتی ہے۔ Core Data خود بخود Date کو ذخیرہ میں سیریلائز کرتا ہے۔ تاریخ فلٹرنگ والے سوالات کے لیے، موازنہ آپریٹرز کے ساتھ NSPredicate استعمال کریں — Core Data SQLite سطح پر ٹائم زون کو درست طریقے سے ہینڈل کرتا ہے۔

Date اور CFAbsoluteTime میں کیا فرق ہے؟

CFAbsoluteTime ایک Core Foundation قسم ہے جو اسی حوالہ تاریخ (1 جنوری 2001) کا استعمال کرتی ہے۔ Date اور CFAbsoluteTime براہ راست تبدیلی کے ذریعے قابل تبادلہ ہیں۔ Date(timeIntervalSinceReferenceDate:) CFAbsoluteTime قبول کرتا ہے، اور Date.timeIntervalSinceReferenceDate CFAbsoluteTime لوٹاتا ہے۔

کیا Date کو اعلیٰ درستگی کی پیمائش کے لیے استعمال کیا جا سکتا ہے؟

Date میں ملی سیکنڈ درستگی ہے لیکن iOS/macOS ہارڈویئر کی حدود کی وجہ سے نینو سیکنڈ درستگی کی ضمانت نہیں دیتا۔ اعلیٰ درستگی کی پیمائش کے لیے، mach_absolute_time یا Swift 5.7+ سے ContinuousClock استعمال کریں، جو ہارڈویئر پروسیسر سائیکل کاؤنٹرز پر کام کرتے ہیں۔

خلاصہ

  • Date — 1 جنوری 2001 کی حوالہ تاریخ سے TimeInterval کے طور پر وقت میں ایک مطلق لمحہ ذخیرہ کرنے کے لیے Foundation قدر کی قسم۔
  • TimeInterval (Double) — دو تاریخوں کے درمیان سیکنڈز کی تعداد، Date کے ساتھ موازنہ اور ریاضی فراہم کرتا ہے۔
  • Calendar اور DateComponents — Date سے سال، مہینہ، دن اور دیگر کیلنڈر اجزاء نکالنے کا واحد طریقہ۔
  • DateFormatter اور ISO8601DateFormatter — سٹرنگ فارمیٹ میں تاریخیں ظاہر کرنے اور سیریلائز کرنے کے لیے ضروری اوزار۔
  • Date.distantPast اور Date.distantFuture — الگورتھم میں فلٹرنگ اور ترتیب دینے کے لیے حدی اقدار۔
  • Date میں ٹائم زون نہیں — ڈسپلے کے لیے اجزاء نکالتے وقت Calendar سطح پر ٹائم زون شامل کیا جاتا ہے۔
  • Core Data اور Codable مقامی طور پر Date کو سپورٹ کرتے ہیں، اضافی تبدیلیوں کے بغیر تاریخوں کے ذخیرہ اور منتقلی کو آسان بناتے ہیں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں