Date হল একটি Foundation স্ট্রাকচার যা ক্যালেন্ডার এবং সময় অঞ্চল থেকে স্বাধীনভাবে সময়ের একটি নির্দিষ্ট মুহূর্ত উপস্থাপন করে। টাইপটি ১ জানুয়ারি ২০০১-এর রেফারেন্স তারিখ থেকে অতিবাহিত সেকেন্ডের সংখ্যা সংরক্ষণ করে এবং সময়ের ব্যবধান তুলনা ও গণনার জন্য মৌলিক অপারেশন প্রদান করে। Apple Developer Documentation (২০২৫) অনুসারে, Date সমস্ত Apple ফ্রেমওয়ার্কে ব্যবহৃত হয়: UIKit এবং SwiftUI থেকে CloudKit এবং Core Data পর্যন্ত। Date-এর কাজ বোঝা যেকোনো iOS ডেভেলপারের জন্য অপরিহার্য, কারণ এটি ছাড়া অ্যাপ্লিকেশনে সময় পরিচালনা করা অসম্ভব।
মূল বিষয়
Date Foundation ফ্রেমওয়ার্কের একটি ভ্যালু টাইপ যা সময়ের একটি পরম মুহূর্ত ক্যাপচার করে। ক্যালেন্ডার উপস্থাপনা (বছর, মাস, দিন) থেকে ভিন্ন, Date সময় অঞ্চল বা ক্যালেন্ডার সিস্টেমের উপর নির্ভর করে না — এটি সম্পূর্ণরূপে একটি সংখ্যাসূচক টাইমস্ট্যাম্প মান।
Date-এর অভ্যন্তরীণ উপস্থাপনা হল TimeInterval (Double-এর জন্য একটি টাইপ উপনাম), যা রেফারেন্স তারিখ — ১ জানুয়ারি ২০০১, ০০:০০:০০ UTC —-এর সাপেক্ষে সেকেন্ডের সংখ্যা সংরক্ষণ করে। Apple পুরোনো NeXTSTEP সিস্টেমের সাথে সামঞ্জস্যের জন্য Unix যুগ (১৯৭০) এর পরিবর্তে এই তারিখটি বেছে নিয়েছে, যার উপর 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)")
// ১ ঘন্টায় (৩৬০০ সেকেন্ড) তারিখ
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")
}
৮৬৪০০-এর 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 স্বয়ংক্রিয়ভাবে স্থানীয়করণ প্রয়োগ করে: রাশিয়ান লোকেলের জন্য, তারিখটি “২১ জুলাই ২০২৬” ফর্ম্যাটে প্রদর্শিত হবে।
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 ব্যবহার করে বাস্তবায়িত হয়। লক্ষ্য তারিখ এবং বর্তমান তারিখের মধ্যে পার্থক্য গণনা করুন, সেকেন্ডে অবশিষ্ট পান এবং দিন, ঘন্টা, মিনিটে রূপান্তর করুন। নিয়মিত আপডেটের জন্য, ১ সেকেন্ডের ব্যবধানে 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-কে ১০০% নির্ভুলতার সাথে তুলনা, সিরিয়ালাইজ এবং গাণিতিকভাবে প্রক্রিয়া করা যেতে পারে, যখন স্ট্রিং উপস্থাপনার জন্য সর্বদা একটি ফর্ম্যাটারের মাধ্যমে পার্সিং প্রয়োজন।
Date একটি পরম টাইমস্ট্যাম্প (রেফারেন্স তারিখ থেকে সেকেন্ডের সংখ্যা) যা সময় অঞ্চলের উপর নির্ভর করে না। সময় অঞ্চল একটি প্রদর্শন প্রসঙ্গ। UTC এবং মস্কোতে একই Date একই ভৌত মুহূর্ত উপস্থাপন করে তবে বিভিন্ন ক্যালেন্ডার সময় হিসাবে প্রদর্শিত হয়।
Date একটি অ্যাট্রিবিউট টাইপ হিসাবে Core Data দ্বারা নেটিভভাবে সমর্থিত। Core Data স্বয়ংক্রিয়ভাবে Date-কে স্টোরেজে সিরিয়ালাইজ করে। তারিখ ফিল্টারিং সহ কোয়েরির জন্য, তুলনা অপারেটর সহ NSPredicate ব্যবহার করুন — Core Data SQLite স্তরে সঠিকভাবে timezone পরিচালনা করে।
CFAbsoluteTime একটি Core Foundation টাইপ যা একই রেফারেন্স তারিখ (১ জানুয়ারি ২০০১) ব্যবহার করে। Date এবং CFAbsoluteTime সরাসরি রূপান্তরের মাধ্যমে বিনিময়যোগ্য। Date(timeIntervalSinceReferenceDate:) CFAbsoluteTime গ্রহণ করে এবং Date.timeIntervalSinceReferenceDate CFAbsoluteTime ফেরত দেয়।
Date-এর মিলিসেকেন্ড নির্ভুলতা আছে কিন্তু iOS/macOS হার্ডওয়্যার সীমাবদ্ধতার কারণে ন্যানোসেকেন্ড নির্ভুলতার গ্যারান্টি দেয় না। উচ্চ-নির্ভুলতা পরিমাপের জন্য, mach_absolute_time বা Swift ৫.৭+ থেকে ContinuousClock ব্যবহার করুন, যা হার্ডওয়্যার প্রসেসর সাইকেল কাউন্টারে কাজ করে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন