تحويل التاريخ من هجري إلى ميلادي والعكس بـ C#

عندما تتعامل مع التاريخ والوقت في C#.Net ستستخدم غالباً كلاس DateTime. مثلاً عندما تود أخذ التاريخ والوقت الحالي وطباعته في صندوق نص اسمه (txtOut)، ستكتب مثل هذا الأمر:

DateTime dateTime = DateTime.Now;
txtOut.Text = dateTime.ToString();

ناتج الكود السابق سيكون التاريخ والوقت الحالي عند تشغيل الكود، ولكن سيختلف تنسيق التاريخ ونوعه باختلاف اعدادات النظام للمستخدم. مثلاً: لو كان اعدادات تاريخ نظام المستخدم هو الميلادي (تنسيق الولايات المتحدة)، سيكون الناتج مشابه للتالي:

2/8/2019 10:24:04 PM

ولو كان اعدادت تاريخ نظام المستخدم هو الهجري (تنسيق المملكة العربية السعودية)، سيكون الناتج مشابه للتالي:

03/06/40 10:30:38 م

أحياناً، قد يكون هذا الأمر مزعج لك وترغب في توحيد عرض التواريخ بغض النظر عن اعدادات نظام المستخدم. لذلك أن كنت ترغب في تعديل الكود السابق ليظهر لك التاريخ بالهجري (تنسيق المملكة العربية السعودية)، يمكنك كتابة الكود التالي:

DateTime dateTime = DateTime.Now;
DateTimeFormatInfo format = new CultureInfo("ar-sa", false).DateTimeFormat;
format.Calendar = new HijriCalendar();
txtOut.Text = dateTime.ToString(format);

ليعمل الكود السابق، تحتاج إلى اضافة استخدام المكتبة (System.Globalization) في أعلى الملف:

using System.Globalization;

ناتج الكود السابق سيكون بالتقويم الهجري (تنسيق المملكة العربية السعودية) ولن يتم اخذ اعدادات النظام:

يمكنك تغيير التنسيق “ar-sa” في الكود السابق إلى كود البلد الذي توده. على سبيل المثال: “ar-kw” تنسيق دولة الكويت. أما بالنسبة للتاريخ الميلادي، بنفس الطريقة ولكن فقط نقوم بتغيير التقويم للميلادي، وفي حال الرغبة بعرض التاريخ الميلادي بتنسيق الولايات المتحدة (الشهر/اليوم/السنة) يمكن كتابة الكود التالي:

DateTime dateTime = DateTime.Now;
DateTimeFormatInfo format = new CultureInfo("en-us", false).DateTimeFormat;
format.Calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
txtOut.Text = dateTime.ToString(format);

ناتج الكود السابق سيكون بالتاريخ الميلادي:

تعلمنا مما سبق كيف نجلب التاريخ والوقت الحالي ثم نغير التاريخ بتغيير تنسيق التاريخ والتقويم. ولكن كيف لو كان لدينا تاريخ هجري محدد وليس الحالي ونرغب بتحويله لميلادي؟ الأمر بسيط. لنفرض أن التاريخ الهجري الذي نرغب بتحويله لميلادي هو (1/9/1440 هـ)، يمكنك كتابة الكود التالي:

HijriCalendar hijriCalendar = new HijriCalendar();
DateTime dateTime = new DateTime(1440, 9, 1, hijriCalendar);
DateTimeFormatInfo englishFormat = new CultureInfo("en-us", false).DateTimeFormat;
englishFormat.Calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
txtOut.Text = "Gregorian(US):  " + dateTime.ToString(englishFormat);
DateTimeFormatInfo arabicFormat = new CultureInfo("ar-sa", false).DateTimeFormat;
arabicFormat.Calendar = new HijriCalendar();
txtOut.Text += Environment.NewLine + "Hijri(SA):            " + dateTime.ToString(arabicFormat);

ناتج الكود السابق:

كما تلاحظ، نتيجة تحويل تاريخ (1/9/1440 هـ) إلى ميلادي هو (5/5/2019 م). لنجرب الآن التحويل من ميلادي إلى هجري (تحويل 5/5/2019م):

GregorianCalendar gregorianCalendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
DateTime dateTime = new DateTime(2019, 5, 5, gregorianCalendar);
DateTimeFormatInfo arabicFormat = new CultureInfo("ar-sa", false).DateTimeFormat;
arabicFormat.Calendar = new HijriCalendar();
txtOut.Text = "Hijri(SA):            " + dateTime.ToString(arabicFormat);
DateTimeFormatInfo englishFormat = new CultureInfo("en-us", false).DateTimeFormat;
englishFormat.Calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
txtOut.Text += Environment.NewLine + "Gregorian(US):  " + dateTime.ToString(englishFormat);

نتيجة الكود السابق:

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

صورة العرض من موقع larutadelsorigens.ca

تعليق واحد على “تحويل التاريخ من هجري إلى ميلادي والعكس بـ C#”

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *