مقدمة في العمل مع التواريخ والوقت في Swift
\nالعمل مع التواريخ والوقت هو أحد المهام الأساسية عند تطوير التطبيقات لنظامي iOS و macOS. من عرض التاريخ الحالي ببساطة إلى الحسابات المعقدة للفترات الزمنية وإدارة المناطق الزمنية، توفر Swift مجموعة أدوات قوية ومرنة. في هذه المقالة، سنستعرض الفئات والهياكل الأساسية: Date و DateFormatter و Calendar و DateComponents و TimeInterval. ستتعلم كيفية إنشاء التواريخ وتنسيقها ومقارنتها والتعامل معها عمليًا.
الفئات والهياكل الأساسية
\nفي Swift، يتم استخدام عدة أنواع أساسية للعمل مع التواريخ. دعنا نستعرض كلًا منها.
\n- \n
- Date — هيكل يمثل لحظة زمنية محددة. وهو مستقل عن التقويم أو المنطقة الزمنية. \n
- DateFormatter — فئة لتحويل التاريخ إلى نص والعكس. \n
- Calendar — هيكل يصف التقويم (ميلادي، بوذي، إلخ) ويوفر طرقًا للعمل مع مكونات التاريخ. \n
- DateComponents — هيكل لتخزين المكونات الفردية للتاريخ (السنة، الشهر، اليوم، الساعة، الدقيقة، إلخ). \n
- TimeInterval — نوع (Double) يمثل عدد الثواني. \n
العمل مع Date و DateFormatter
\nلنبدأ بالأبسط: الحصول على التاريخ الحالي وعرضه للمستخدم.
\n\nالحصول على التاريخ الحالي
\nimport Foundation\n\nlet currentDate = Date()\nprint("التاريخ والوقت الحالي: \\(currentDate)")\n// الإخراج: التاريخ والوقت الحالي: 2025-04-05 12:30:00 +0000\n\nتنسيق التاريخ
\nلجعل التاريخ يبدو مألوفًا، نستخدم DateFormatter:
let formatter = DateFormatter()\nformatter.dateFormat = "dd.MM.yyyy HH:mm"\nlet dateString = formatter.string(from: currentDate)\nprint("التاريخ المنسق: \\(dateString)")\n// الإخراج: التاريخ المنسق: 05.04.2025 12:30\n\nتحويل نص إلى تاريخ
\nlet dateString = "2025-04-05 14:00"\nformatter.dateFormat = "yyyy-MM-dd HH:mm"\nif let parsedDate = formatter.date(from: dateString) {\n print("التاريخ المحول: \\(parsedDate)")\n} else {\n print("خطأ في التحويل")\n}\nهام: تأكد دائمًا من أن date(from:) لا يُرجع nil، وإلا فقد يتعطل التطبيق.
التلاعب بالتواريخ عبر Calendar و DateComponents
\nغالبًا ما نحتاج إلى إضافة أيام أو أشهر أو حساب الفرق بين التواريخ. هنا يأتي دور Calendar.
إضافة وطرح الوقت
\nlet calendar = Calendar.current\nlet oneWeekLater = calendar.date(byAdding: .day, value: 7, to: currentDate)!\nlet oneMonthAgo = calendar.date(byAdding: .month, value: -1, to: currentDate)!\n\nprint("بعد أسبوع: \\(formatter.string(from: oneWeekLater))")\nprint("قبل شهر: \\(formatter.string(from: oneMonthAgo))")\n\nاستخراج مكونات التاريخ
\nlet components = calendar.dateComponents([.year, .month, .day, .hour], from: currentDate)\nif let year = components.year, let month = components.month {\n print("اليوم: \\(year)-\\(month)")\n}\n\nإنشاء تاريخ من المكونات
\nvar newComponents = DateComponents()\nnewComponents.year = 2025\nnewComponents.month = 12\nnewComponents.day = 25\nnewComponents.hour = 10\nnewComponents.minute = 0\n\nif let christmas = calendar.date(from: newComponents) {\n print("عيد الميلاد: \\(formatter.string(from: christmas))")\n}\n\nمقارنة التواريخ والعمل مع TimeInterval
\nتتيح Swift مقارنة التواريخ بسهولة وحساب الفترات الزمنية.
\n\nمقارنة التواريخ
\nlet now = Date()\nlet futureDate = calendar.date(byAdding: .day, value: 10, to: now)!\n\nif futureDate > now {\n print("