العمل مع التواريخ في Swift (iOS/macOS): المكتبات والأطر

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع التواريخ في Swift (iOS/macOS): نظرة عامة على المكتبات والأدوات



في نظام Apple البيئي، يتم العمل مع التواريخ والوقت تقليديًا من خلال إطار Foundation. ومع ذلك، بالنسبة للسيناريوهات المعقدة (تحليل التنسيقات غير القياسية، العمل مع التواريخ النسبية، المعالجات في مناطق زمنية مختلفة)، غالبًا ما يلجأ المطورون إلى المكتبات الخارجية. في هذه المقالة، سنستعرض الإمكانيات المدمجة في Swift بالإضافة إلى الأدوات الشائعة لمعالجة التواريخ.



1. الأدوات المدمجة في Foundation (Date، DateFormatter، Calendar)



النوع الأساسي للعمل مع التواريخ هو الهيكل Date. وهو يمثل لحظة زمنية مطلقة (عدد الثواني منذ 1 يناير 2001). للتنسيق، يُستخدم DateFormatter، وللحسابات التقويمية يُستخدم Calendar.



import Foundation

// الحصول على التاريخ الحاليlet now = Date()print("التاريخ الحالي: \\(now)")

// تنسيق التاريخlet formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"formatter.timeZone = TimeZone(identifier: "Europe/Moscow")let formattedDate = formatter.string(from: now)print("التاريخ المنسق: \\(formattedDate)")

// تحليل سلسلة نصية إلى تاريخlet dateString = "2025-03-15 14:30:00"if let parsedDate = formatter.date(from: dateString) { print("التاريخ المحلل: \\(parsedDate)")}

// الحسابات التقويميةlet calendar = Calendar.currentlet tomorrow = calendar.date(byAdding: .day, value: 1, to: now)!print("غدًا: \\(tomorrow)")


2. SwiftDate — مكتبة قوية للعمل مع التواريخ



SwiftDate هي أشهر مكتبة خارجية لـ Swift. وهي توسع إمكانيات Foundation بإضافة:

  • صيغة ملائمة لإنشاء التواريخ (مثل DateInRegion)
  • العمل مع التواريخ النسبية ("منذ ساعتين"، "بعد 3 أيام")
  • دعم جميع المناطق الزمنية والتقاويم
  • تحليل السلاسل النصية بأي تنسيق


import SwiftDate

// إنشاء تاريخ في منطقةlet region = Region(calendar: Calendars.gregorian, zone: Zones.europeMoscow, locale: Locales.russian)let date = DateInRegion("2025-03-15 14:30:00", format: "yyyy-MM-dd HH:mm:ss", region: region)!print("التاريخ في المنطقة: \\(date)")

// الوقت النسبيlet now = DateInRegion()let twoHoursAgo = now - 2.hoursprint("منذ ساعتين: \\(twoHoursAgo.toRelative())") // "منذ ساعتين"

// الفرق بين التواريخlet later = now + 5.dayslet difference = later - nowprint("الفرق: \\(difference.days) أيام")

// التحويل إلى منطقة زمنية أخرىlet newYorkRegion = Region(zone: Zones.americaNewYork)let dateInNY = date.convert(to: newYorkRegion)print("في نيويورك: \\(dateInNY)")


3. TimeInterval والعمل مع الفترات الزمنية



TimeInterval هو نوع بيانات في Swift يمثل عدد الثواني. يُستخدم غالبًا لقياس الفترات الزمنية والتأخيرات.



import Foundation

// إنشاء فترةlet oneHour: TimeInterval = 3600let twoDays: TimeInterval = 2 * 24 * 3600

// قياس وقت التنفيذlet start = Date()// محاكاة عملية طويلةsleep(2)let end = Date()let elapsed = end.timeIntervalSince(start)print("مرت \\(elapsed) ثانية")

// الاستخدام مع DispatchQueueDispatchQueue.main.asyncAfter(deadline: .now() + oneHour) { print("مرت ساعة")}


4. ISO8601DateFormatter — العمل مع التنسيقات الدولية



للعمل مع التواريخ بتنسيق ISO 8601 (المستخدم غالبًا في API)، توفر Apple الفئة المتخصصة ISO8601DateFormatter.



import Foundation

let isoFormatter = ISO8601DateFormatter()isoFormatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]

// تحليل سلسلة ISOlet isoString = "2025-03-15T14:30:00.000Z"if let date =

توصيات