Convert between calendars

How to convert between calendars? Here is what I have:

UmAlQuraCalendar hijri = new UmAlQuraCalendar(); GregorianCalendar cal = new GregorianCalendar(); DateTime hijriDate = new DateTime(1434, 11, 23, hijri); DateTime gregorianDate = ...; // 

I need a gregorianDate that matches hijriDate .

+8
date c # gregorian-calendar umalquracalendar
source share
3 answers

It seems that the date stored in DateTime is always in the current calendar. So, if the current calendar is Gregorian, hijriDate already in Gregorian.

 var hijriDate = new DateTime(1434, 11, 23, hijri); //Console writeline will show 2013-09-29 00:00:00 

If your current UmAlQuraCalendar , you can retrieve the Gregorian date using:

 var hijri = new UmAlQuraCalendar(); var cal = new GregorianCalendar(); var hijriDate = new DateTime(1434, 11, 23, hijri); var y = cal.GetYear(hijriDate), var m = cal.GetMonth(hijriDate), var d = cal.GetDayOfMonth(hijriDate) 
+7
source share

A DateTime can accept input in its constructor with an alternate calendar, but inside it is always stored using the Gregorian equivalent. So, you already have what you are looking for.

 Calendar umAlQura = new UmAlQuraCalendar(); DateTime dt = new DateTime(1434, 11, 23, umAlQura); // As a string, it will format with whatever the calendar for the culture is. Debug.WriteLine(dt.ToString("d", CultureInfo.InvariantCulture)); // 09/29/2013 Debug.WriteLine(dt.ToString("d", new CultureInfo("ar-SA"))); // 23/11/34 // But the individual integer properties are always Gregorian Debug.WriteLine(dt.Year); // 2013 Debug.WriteLine(dt.Month); // 9 Debug.WriteLine(dt.Day); // 29 

Going in the other direction, you need to get the details using the methods in the calendar object.

 DateTime dt = new DateTime(2013, 9, 29); // Gregorian Calendar umAlQura = new UmAlQuraCalendar(); Debug.WriteLine(umAlQura.GetYear(dt)); // 1434 Debug.WriteLine(umAlQura.GetMonth(dt)); // 11 Debug.WriteLine(umAlQura.GetDayOfMonth(dt)); // 23 
+14
source share

As an extension method

 public static DateTime GregorianToUmAlQura(this DateTime gregorianDate) { Calendar umAlQura = new UmAlQuraCalendar(); return new DateTime(umAlQura.GetYear(gregorianDate), umAlQura.GetMonth(gregorianDate), umAlQura.GetDayOfMonth(gregorianDate), umAlQura); } 
0
source share

All Articles