العمل مع التواريخ في C# (.NET): نظرة عامة على المكتبات والأدوات

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

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

ابدأ الدورة

العمل مع التواريخ في C# (.NET): نظرة شاملة على المكتبات والأدوات المدمجة



معالجة التواريخ والوقت هي واحدة من أكثر المهام شيوعًا في التطوير. في نظام C# (.NET) البيئي، توجد وظائف مدمجة قوية (System.DateTime) بالإضافة إلى مكتبات خارجية تسهل السيناريوهات المعقدة: العمل مع المناطق الزمنية، التنسيق، الفواصل الزمنية والتحليل. في هذه المقالة، سنستعرض الأدوات الرئيسية، بما في ذلك الإمكانيات الحديثة لـ .NET 6+ وحزم NuGet الشائعة.



1. الأدوات المدمجة: DateTime، DateOnly، TimeOnly



الفئة الأساسية System.DateTime متاحة منذ الإصدارات الأولى لـ .NET. وهي تدعم:

  • إنشاء تاريخ: new DateTime(2025, 3, 15)
  • العمليات الحسابية: date.AddDays(10)، date.AddMonths(-1)
  • المقارنة: date1 > date2
  • التنسيق: date.ToString("yyyy-MM-dd")


ابتداءً من .NET 6، ظهرت الأنواع DateOnly و TimeOnly - وهي خالية من الارتباط بالمنطقة الزمنية وتخزن التاريخ فقط أو الوقت فقط. وهذا مناسب لأعياد الميلاد، جداول العمل والمواعيد.



using System;

DateOnly birthday = new DateOnly(1990, 5, 20);TimeOnly alarm = new TimeOnly(7, 30);

Console.WriteLine($"التاريخ: {birthday}, الوقت: {alarm}");// الإخراج: التاريخ: 20.05.1990, الوقت: 07:30


2. TimeSpan — الفواصل الزمنية



للعمل مع الفترات الزمنية، يُستخدم TimeSpan. فهو يسمح بحساب الفرق بين التواريخ، مدة العمليات والمهلات الزمنية.



DateTime start = DateTime.Now;// ... تنفيذ الكود ...DateTime end = DateTime.Now;

TimeSpan elapsed = end - start;Console.WriteLine($"المدة المنقضية: {elapsed.TotalSeconds} ثانية.");


3. Noda Time — العمل المتقدم مع التواريخ



Noda Time (NuGet: NodaTime) هي مكتبة من تأليف جون سكيت (مؤلف كتاب مشهور عن C#). وهي تحل مشاكل DateTime:

  • فصل واضح بين "لحظة زمنية" (Instant)، "تاريخ في التقويم" (LocalDate) و"وقت مع منطقة زمنية" (ZonedDateTime).
  • دعم التقاويم (الإسلامي، العبري، الياباني).
  • ثبات جميع الأنواع (Immutable).
  • معالجة صحيحة للمناطق الزمنية عبر قاعدة بيانات IANA (tzdata).


using NodaTime;

Instant now = SystemClock.Instance.GetCurrentInstant();DateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/Moscow"];ZonedDateTime moscowTime = now.InZone(zone);

Console.WriteLine($"الوقت الحالي في موسكو: {moscowTime:yyyy-MM-dd HH:mm}");

// العمل مع LocalDateLocalDate today = LocalDate.FromDateTime(DateTime.Today);LocalDate nextWeek = today.PlusDays(7);


Noda Time مفيدة بشكل خاص في المشاريع التي تكون فيها دقة المناطق الزمنية أمرًا بالغ الأهمية (السجلات، الحجوزات، الأنظمة الدولية).



4. Humanizer — تواريخ قابلة للقراءة البشرية



Humanizer (NuGet: Humanizer.Core) هي مكتبة لتحويل الأرقام والتواريخ والوقت إلى لغة طبيعية. وهي قادرة على:

  • عرض الوقت النسبي: "منذ 3 دقائق"، "بعد يومين".
  • تصريف أسماء الأشهر وأيام الأسبوع.
  • تنسيق الفواصل الزمنية: "ساعة و30 دقيقة".


using Humanizer;

DateTime pastDate = DateTime.UtcNow.AddHours(-5);Console.WriteLine(pastDate.Humanize()); // "منذ 5 ساعات"

TimeSpan span = new TimeSpan(2, 45, 0);Console.WriteLine(span.Humanize()); // "ساعتان و45 دقيقة"


Humanizer يدعم التوطين (اللغة العربية — Humanizer.Core.ar).



5. FluentDateTime — واجهة fluent لـ DateTime



FluentDateTime (NuGet: FluentDateTime) — يضيف دوال امتداد لـ

توصيات