مقدمة: لماذا التعامل مع التواريخ في C# مهم
في تطوير البرمجيات الحديثة، يُعد التعامل مع التواريخ والوقت من أكثر المهام شيوعًا وأهمية بالغة. سواء كان ذلك لتسجيل الأحداث، أو حساب مواعيد التسليم، أو عرض الأخبار، أو إنشاء التقارير — ففي كل مكان نحتاج إلى إدارة دقيقة ومرنة للبيانات الزمنية. توفر لغة C# ومنصة .NET للمطور مجموعة أدوات قوية وبديهية لهذا الغرض.
في هذه المقالة، سنقوم بتحليل الأنواع الأساسية للتعامل مع التواريخ والوقت في C# بالتفصيل: DateTime و TimeSpan و DateTimeOffset. ستتعلم كيفية إنشاء التواريخ وتعديلها وتنسيقها ومقارنتها، بالإضافة إلى كيفية التعامل بكفاءة مع المناطق الزمنية. ستكون المادة مفيدة لكل من المطورين المبتدئين وذوي الخبرة الذين يرغبون في تنظيم معرفتهم.
أنواع البيانات الأساسية: DateTime و TimeSpan و DateTimeOffset
1. هيكل DateTime
DateTime هو النوع الأساسي لتمثيل لحظة زمنية (تاريخ + وقت). يخزن معلومات من 1 يناير عام 0001 إلى 31 ديسمبر عام 9999 بدقة تصل إلى 100 نانوثانية (ticks).
إنشاء كائن DateTime:
// التاريخ والوقت الحاليينDateTime now = DateTime.Now;// التاريخ والوقت الحاليين حسب UTCDateTime utcNow = DateTime.UtcNow;// تاريخ محددDateTime specificDate = new DateTime(2025, 3, 15);// التاريخ والوقت بدقة حتى الثانيةDateTime specificDateTime = new DateTime(2025, 3, 15, 14, 30, 0);// تاريخ اليوم (الوقت = 00:00:00)DateTime today = DateTime.Today;2. هيكل TimeSpan
TimeSpan يمثل فاصلًا زمنيًا (مدة). لا يرتبط بتاريخ محدد، بل يخزن الفرق في الوقت: الأيام، الساعات، الدقائق، الثواني وأجزاء الثانية.
إنشاء واستخدام TimeSpan:
// إنشاء فاصل: يومان، 5 ساعات، 30 دقيقةTimeSpan interval = new TimeSpan(2, 5, 30, 0);// فاصل من الساعاتTimeSpan fromHours = TimeSpan.FromHours(48.5);// الفرق بين تاريخينDateTime start = new DateTime(2025, 1, 1);DateTime end = new DateTime(2025, 3, 15);TimeSpan difference = end - start;Console.WriteLine(difference.Days); // 733. هيكل DateTimeOffset
DateTimeOffset هو بديل أكثر حداثة لـ DateTime، والذي يخزن بالإضافة إلى التاريخ والوقت الإزاحة بالنسبة لـ UTC (مثل +03:00). يساعد ذلك في تجنب الالتباس مع المناطق الزمنية عند نقل البيانات بين الأنظمة.
// الوقت الحالي مع الإزاحةDateTimeOffset localOffset = DateTimeOffset.Now;// الوقت حسب UTC مع الإزاحة +00:00DateTimeOffset utcOffset = DateTimeOffset.UtcNow;// إنشاء مع تحديد الإزاحةDateTimeOffset specific = new DateTimeOffset(2025, 3, 15, 12, 0, 0, TimeSpan.FromHours(3));العمليات الأساسية: الجمع والطرح والمقارنة
الحساب مع DateTime و TimeSpan
من أهم مزايا C# هي سهولة إجراء العمليات الحسابية على التواريخ. يمكنك بسهولة إضافة أو طرح الأيام والأشهر والسنوات، بالإضافة إلى التعامل مع الساعات والدقائق.
DateTime today = DateTime.Today;// إضافة 10 أيامDateTime futureDate = today.AddDays(10);// إضافة شهرينDateTime futureMonth = today.AddMonths(2);// طرح سنة واحدةDateTime pastYear = today.AddYears(-1);// إضافة 5 ساعات و 30 دقيقةDateTime precise = today.AddHours(5).AddMinutes(30);العمل مع TimeSpan:
TimeSpan workDay = new TimeSpan(8, 0, 0); // 8 ساعاتTimeSpan breakTime = new TimeSpan(0, 45, 0); // 45 دقيقةTimeSpan totalWork = workDay + breakTime; // 8 ساعات و 45 دقيقةTimeSpan remaining = workDay - breakTime; // 7 ساعات و 15 دقيقةمقارنة التواريخ
لمقارنة لحظتين زمنيتين، تُستخدم عوامل المقارنة القياسية:
Da