العمل مع التواريخ والوقت في Swift: دليل شامل

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

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

ابدأ الدورة

العمل مع التواريخ والوقت في Swift: من الأساسيات إلى التقنيات المتقدمة



العمل مع التواريخ والوقت هي إحدى المهام الأساسية في تطوير تطبيقات iOS و macOS. توفر Swift مجموعة أدوات قوية ومرنة لهذا الغرض: Date و DateFormatter و Calendar و DateComponents و TimeInterval. في هذه المقالة، سنشرح كل منها بالتفصيل، ونعرض أمثلة عملية، ونتعلم كيفية حل المهام النموذجية مثل تنسيق التواريخ، وحساب الفرق الزمني، والعمل مع المناطق الزمنية والتقاويم.



1. الأساسيات: كلاس Date و TimeInterval



النوع الأساسي لتمثيل لحظة زمنية هو Date. يخزن عدد الثواني المنقضية منذ 1 يناير 2001 الساعة 00:00:00 UTC (التاريخ المرجعي لـ Apple).



إنشاء ومقارنة التواريخ:

import Foundation

// التاريخ والوقت الحاليlet now = Date()print("الآن: \\(now)")

// تاريخ بناءً على فاصل زمني (120 ثانية من اللحظة الحالية)let futureDate = Date(timeIntervalSinceNow: 120)print("بعد دقيقتين: \\(futureDate)")

// تاريخ بناءً على فاصل زمني ثابت من التاريخ المرجعيlet specificDate = Date(timeIntervalSinceReferenceDate: 3600 * 24 * 365) // سنة واحدة من 2001print("تاريخ تقريبي: \\(specificDate)")

// مقارنة التواريخif now < futureDate { print("التاريخ الحالي أقدم من التاريخ المستقبلي")}


TimeInterval هو مجرد اسم مستعار لـ Double، يمثل عدد الثواني. يُستخدم لحساب الفرق بين التواريخ:

let startDate = Date()sleep(2) // محاكاة تأخيرlet endDate = Date()

let elapsed: TimeInterval = endDate.timeIntervalSince(startDate)print("مر \\(elapsed) ثانية") // سيطبع ~2.0

// العملية العكسيةlet minutes: TimeInterval = 5 * 60let fiveMinutesLater = Date(timeInterval: minutes, since: startDate)


2. تنسيق التواريخ باستخدام DateFormatter



لعرض التاريخ للمستخدم بشكل مفهوم، يُستخدم DateFormatter. يدعم التوطين والعديد من الأنماط.



التنسيق الأساسي:

let formatter = DateFormatter()formatter.locale = Locale(identifier: "ar_SA") // لغة عربية (السعودية)formatter.timeZone = TimeZone.current       // المنطقة الزمنية الحالية

// الأنماط القياسيةformatter.dateStyle = .fullformatter.timeStyle = .shortprint(formatter.string(from: Date())) // مثال: "الجمعة، 24 فبراير 2025 م، 2:30 م"

formatter.dateStyle = .mediumformatter.timeStyle = .noneprint(formatter.string(from: Date())) // "24 فبراير 2025 م"


تنسيق مخصص:

formatter.dateFormat = "dd.MM.yyyy HH:mm"print(formatter.string(from: Date())) // "24.02.2025 14:30"

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


هام: عند التحليل، تحقق دائمًا من أن date(from:) لا يُرجع nil. تنسيق السلسلة غير الصحيح أو عدم تطابق اللغة سيؤدي إلى خطأ.



3. الحسابات التقويمية: Calendar و DateComponents



كلاس Calendar يغلف معلومات النظام التقويمي (ميلادي، إسلامي، بوذي، إلخ) ويسمح بإجراء عمليات معقدة على التواريخ. يُستخدم DateComponents لوصف المكونات الفردية للتاريخ (السنة، الشهر، اليوم، الساعة، إلخ).



استخراج المكونات:

let calendar = Calendar.currentlet components = calendar.dateComponents([.year, .month, .day, .weekday], from: Date())

print("السنة: \\(components.year!)")print("الشهر: \\(components.month!)")print("اليوم: \\(components.day!)")print("يوم الأسبوع: \\(components.weekday!)") // 1 - الأحد، 2 - الإثنين...

المدونات

توصيات الكتب