العمل مع التواريخ والوقت في C#: من الألف إلى الياء

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

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

ابدأ الدورة

مقدمة: لماذا العمل مع التواريخ والوقت في C# هو أساس لأي مطور

\n

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

\n\n

الأنواع الأساسية للعمل مع التاريخ والوقت في .NET

\n

في .NET توجد عدة أنواع، كل منها يحل مشكلة معينة. دعنا نستعرض أهمها.

\n\n

DateTime - الأساس

\n

DateTime هو هيكل يمثل لحظة زمنية (التاريخ والوقت). يدعم نطاقاً من 01.01.0001 إلى 31.12.9999. يمكن إنشاء كائن بعدة طرق:

\n
// التاريخ والوقت الحاليين\nDateTime now = DateTime.Now;\n// التاريخ والوقت الحاليين بالتوقيت العالمي (UTC)\nDateTime utcNow = DateTime.UtcNow;\n// تاريخ محدد\nDateTime specificDate = new DateTime(2025, 3, 15);\n// التاريخ والوقت بدقة حتى الثانية\nDateTime withTime = new DateTime(2025, 3, 15, 14, 30, 0);\n// تاريخ اليوم (الوقت 00:00:00)\nDateTime today = DateTime.Today;
\n\n

TimeSpan - الفترات الزمنية

\n

TimeSpan يمثل فترة زمنية (الفرق بين تاريخين). وهو مناسب لحساب مدة العمليات:

\n
// إنشاء فترة زمنية\nTimeSpan interval = new TimeSpan(2, 5, 30); // ساعتان، 5 دقائق، 30 ثانية\n// الفرق بين تاريخين\nDateTime start = DateTime.Now;\nSystem.Threading.Thread.Sleep(1000); // محاكاة عمل\nDateTime end = DateTime.Now;\nTimeSpan duration = end - start;\nConsole.WriteLine($"مرت {duration.TotalSeconds} ثانية");
\n\n

DateTimeOffset - التاريخ مع مراعاة المنطقة الزمنية

\n

للتطبيقات الحديثة التي تعمل مع مستخدمين من مناطق مختلفة، يعتبر DateTimeOffset مهماً جداً. فهو يخزن التاريخ والوقت مع الإزاحة عن التوقيت العالمي (UTC):

\n
// الوقت الحالي مع الإزاحة المحلية\nDateTimeOffset localOffset = DateTimeOffset.Now;\n// الوقت مع إزاحة محددة\nDateTimeOffset customOffset = new DateTimeOffset(2025, 3, 15, 12, 0, 0, TimeSpan.FromHours(3));\n// التحويل إلى UTC\nDateTime utc = localOffset.UtcDateTime;
\n\n

تنسيق وتحليل التواريخ

\n

العرض الصحيح للتواريخ للمستخدم وقراءة البيانات من النصوص هي مهارات ضرورية.

\n\n

التنسيق: ToString() والقوالب المخصصة

\n

الطريقة ToString() تقبل سلسلة تنسيق. أشهر التنسيقات القياسية:

\n
    \n
  • "d" — تاريخ قصير (15.03.2025)
  • \n
  • "D" — تاريخ كامل (15 مارس 2025)
  • \n
  • "t" — وقت قصير (14:30)
  • \n
  • "T" — وقت كامل (14:30:00)
  • \n
  • "g" — تنسيق عام تاريخ/وقت (15.03.2025 14:30)
  • \n
\n

أمثلة على التنسيق المخصص:

\n
DateTime dt = new DateTime(2025, 3, 15, 14, 30, 45);\nConsole.WriteLine(dt.ToString("yyyy-MM-dd")); // 2025-03-15\nConsole.WriteLine(dt.ToString("dd.MM.yyyy HH:mm")); // 15.03.2025 14:30\nConsole.WriteLine(dt.ToString("dddd, MMMM yyyy")); // السبت, مارس 2025 (يعتمد على الثقافة)
\n\n

التحليل: تحويل النص إلى تاريخ

\n

للتحليل الموثوق استخدم DateTime.TryParse أو DateTime.ParseExact:

\n
string dateString = "15.03.2025";\nif (DateTime.TryParse(dateString, out DateTime result))\n{\n    Console.WriteLine($"نجاح: {result}");\n}\nelse\n{\n    Console.WriteLine("خطأ في التحليل");\n}\n\n// تحليل دقيق مع تحديد التنسيق\nstring exactString = "2025-03-15 14:30:00";\nDateTime parsed = DateTime.ParseExact(exactString, "yyyy-MM-dd HH:mm                

المدونات

توصيات الكتب