مقدمة في التعامل مع التواريخ والوقت في Swift
يُعد التعامل مع التواريخ والوقت من المهام الأساسية في تطوير تطبيقات iOS و macOS. سواء كان الأمر يتعلق بعرض التاريخ الحالي، أو حساب الفرق بين الأحداث، أو جدولة الإشعارات، فإن Swift يوفر مجموعة أدوات قوية ومرنة لهذه الأغراض. في هذه المقالة، سنستعرض الفئات والطرق الأساسية: Date، DateFormatter، Calendar، DateComponents و TimeInterval. ستتعلم كيفية إنشاء التواريخ وتنسيقها ومقارنتها والتعامل معها في Swift.
ستكون المادة مفيدة لكل من المبتدئين والمطورين ذوي الخبرة الذين يرغبون في تنظيم معرفتهم. يمكن استخدام جميع أمثلة التعليمات البرمجية مباشرة في مشاريعك.
الفئات الأساسية للتعامل مع التواريخ
الفئة Date
Date هو نوع أساسي يمثل لحظة زمنية محددة، بغض النظر عن المنطقة الزمنية أو التقويم. يخزن عدد الثواني المنقضية منذ 1 يناير 2001 (عصر Cocoa).
import Foundation
// التاريخ والوقت الحاليانlet now = Date()print("الآن: \\(now)")
// التاريخ بعد ساعة واحدةlet oneHourLater = Date(timeIntervalSinceNow: 3600)print("بعد ساعة: \\(oneHourLater)")
// تاريخ من عدد محدد من الثواني منذ العصرlet epochDate = Date(timeIntervalSinceReferenceDate: 0)print("عصر Cocoa: \\(epochDate)")TimeInterval
TimeInterval هو مجرد اسم مستعار لـ Double، يمثل عدد الثواني. يُستخدم لتحديد الفترات الزمنية.
let interval: TimeInterval = 86400 // 24 ساعة بالثوانيlet tomorrow = Date(timeIntervalSinceNow: interval)print("غداً: \\(tomorrow)")DateFormatter
DateFormatter مسؤول عن تحويل التاريخ إلى سلسلة نصية والعكس. هذه واحدة من أكثر الفئات استخداماً.
let formatter = DateFormatter()formatter.dateStyle = .longformatter.timeStyle = .short
let currentDate = Date()let dateString = formatter.string(from: currentDate)print("التاريخ المنسق: \\(dateString)")
// التحويل العكسيlet dateFromString = formatter.date(from: "15 أبريل 2025، 14:30")print("التاريخ من السلسلة النصية: \\(dateFromString ?? Date())")يمكنك تعيين تنسيق مخصص باستخدام dateFormat:
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"let customString = formatter.string(from: Date())print("تنسيق مخصص: \\(customString)")التقويم ومكونات التاريخ
Calendar
Calendar يسمح بالتعامل مع التواريخ في سياق تقويم معين (ميلادي، إسلامي، إلخ) ومنطقة زمنية محددة.
let calendar = Calendar.currentlet components = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: Date())print("السنة: \\(components.year!), الشهر: \\(components.month!), اليوم: \\(components.day!)")DateComponents
DateComponents هي بنية تحتوي على مكونات التاريخ الفردية (السنة، الشهر، اليوم، الساعة، إلخ). تُستخدم لإنشاء تواريخ جديدة أو استخراج أجزاء من التواريخ الموجودة.
// إنشاء تاريخ من المكوناتvar birthdayComponents = DateComponents()birthdayComponents.year = 1990birthdayComponents.month = 6birthdayComponents.day = 15birthdayComponents.hour = 10
if let birthday = calendar.date(from: birthdayComponents) { print("تاريخ الميلاد: \\(birthday)")}
// إضافة أيام إلى تاريخif let nextWeek = calendar.date(byAdding: .day, value: 7, to: Date()) { print("بعد أسبوع: \\(nextWeek)")}يمكن استخدام المكونات للتحقق من خصائص التاريخ:
let isToday = calendar.isDateInToday(Date())print("هل اليوم؟ \\(isToday)")
let isWeekend = calendar.isDateInWeekend(Date())print("هل هي عطلة نهاية الأسبوع؟ \\(isWeekend)")