العمل مع التواريخ والأوقات في C#: دليل شامل

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

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

ابدأ الدورة

مقدمة في العمل مع التواريخ والوقت في C#



العمل مع التواريخ والوقت هو أحد المهام الأساسية في تطوير البرمجيات. سواء كان ذلك لتسجيل الأحداث، حساب المواعيد النهائية، إنشاء التقارير أو العمل مع قواعد البيانات - فإن القدرة على إدارة البيانات الزمنية بشكل صحيح أمر بالغ الأهمية. في C# (منصة .NET) توجد مجموعة قوية ومرنة من الأدوات لهذه الأغراض، تتضمن الهياكل DateTime و TimeSpan و DateTimeOffset.



في هذه المقالة، سنقوم بتحليل جميع الجوانب الرئيسية للعمل مع التواريخ والوقت في C# بالتفصيل. ستتعلم كيفية إنشاء البيانات الزمنية وتنسيقها ومقارنتها والتعامل معها، بالإضافة إلى التعرف على أفضل الممارسات التي ستساعدك على تجنب الأخطاء الشائعة.



الهياكل الأساسية: DateTime و TimeSpan و DateTimeOffset



هيكل DateTime



DateTime هو الهيكل الأساسي لتمثيل لحظة زمنية (تاريخ + وقت). يمكنه تمثيل القيم من 01.01.0001 إلى 31.12.9999.



إنشاء كائن DateTime:



// التاريخ والوقت الحاليانDateTime now = DateTime.Now;DateTime utcNow = DateTime.UtcNow;

// تاريخ ووقت محددانDateTime specificDate = new DateTime(2025, 3, 15, 14, 30, 0); // 15 مارس 2025, 14:30:00

// التحليل من سلسلة نصيةDateTime parsedDate = DateTime.Parse("2025-03-15");

// استخدام TryParse للتحليل الآمنif (DateTime.TryParse("2025-03-15", out DateTime result)){ Console.WriteLine($"تم التحليل بنجاح: {result}");}


الخصائص والطرق الأساسية:



  • Date — يُرجع التاريخ فقط (الوقت = 00:00:00)
  • Year, Month, Day, Hour, Minute, Second — المكونات الفردية
  • DayOfWeek — يوم الأسبوع (enum)
  • AddDays(), AddMonths(), AddYears() — العمليات الحسابية على التواريخ
  • AddHours(), AddMinutes(), AddSeconds() — العمليات الحسابية على الوقت


هيكل TimeSpan



TimeSpan يمثل فترة زمنية (الفاصل الزمني بين لحظتين). إنه ليس تاريخًا، بل مدة زمنية.



// إنشاء TimeSpanTimeSpan interval = new TimeSpan(2, 15, 30); // ساعتان و 15 دقيقة و 30 ثانية

// الفرق بين تاريخينDateTime start = new DateTime(2025, 1, 1);DateTime end = new DateTime(2025, 1, 10);TimeSpan difference = end - start; // 9 أيام

// خصائص TimeSpanConsole.WriteLine($"الأيام: {difference.Days}"); // 9Console.WriteLine($"إجمالي الساعات: {difference.TotalHours}"); // 216Console.WriteLine($"إجمالي الدقائق: {difference.TotalMinutes}"); // 12960

// العمليات الحسابية مع TimeSpanTimeSpan workDay = new TimeSpan(8, 0, 0); // 8 ساعاتTimeSpan breakTime = new TimeSpan(1, 0, 0); // ساعة واحدةTimeSpan actualWork = workDay - breakTime; // 7 ساعات


هيكل DateTimeOffset



DateTimeOffset هو نسخة محسنة من DateTime تراعي الإزاحة بالنسبة لـ UTC. هذا أمر بالغ الأهمية للتطبيقات التي تتعامل مع مستخدمين من مناطق زمنية مختلفة.



// الوقت الحالي مع مراعاة المنطقة الزمنيةDateTimeOffset nowOffset = DateTimeOffset.Now;

// الإنشاء مع تحديد الإزاحةDateTimeOffset withOffset = new DateTimeOffset(2025, 3, 15, 14, 0, 0, TimeSpan.FromHours(3));

// التحويل بين المناطق الزمنيةDateTimeOffset utc = withOffset.ToUniversalTime();DateTimeOffset local = withOffset.ToLocalTime();

// الحصول على الإزاحةConsole.WriteLine($"الإزاحة: {withOffset.Offset}"); // +03:00


متى تستخدم DateTimeOffset بدلاً من DateTime؟ إذا كان تطبيقك يتعامل مع مستخدمين من مناطق زمنية مختلفة أو يخزن البيانات بصيغة UTC، فاستخدم DateTimeOffset. هذا يمنع

المدونات

توصيات الكتب