/// <summary> /// /// </summary> /// <param name="persianDate"></param> /// <returns></returns> public static DateTime PersianDateTimeToGergorian(List <int> persianDate) { var persianCalendar = new System.Globalization.PersianCalendar(); DateTime date = new DateTime(1900, 1, 1); List <int> Start = GergorianDateTimeToPersion(date); date = persianCalendar.AddYears(date, persianDate[0] - Start[0]); date = persianCalendar.AddMonths(date, persianDate[1] - Start[1]); date = persianCalendar.AddDays(date, persianDate[2] - Start[2]); try { date = persianCalendar.AddHours(date, persianDate[3] - Start[3]); date = persianCalendar.AddMinutes(date, persianDate[4] - Start[4]); date = persianCalendar.AddSeconds(date, persianDate[5] - Start[5]); } catch { date = persianCalendar.AddHours(date, 12 - Start[3]); date = persianCalendar.AddMinutes(date, 0 - Start[4]); date = persianCalendar.AddSeconds(date, 0 - Start[5]); } return(date); }
//Test methods. internal static string tst() { string r = ""; System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar(); var z = pc.ToDateTime(1, 1, 1, 0, 0, 0, 0); for (uint i = 0; i <= (DateTime.MaxValue - z).Days; i++) { int y, m, d; yearMonthDay(i, out y, out m, out d); var td = pc.AddDays(z, (int)i); int yy = pc.GetYear(td), mm = pc.GetMonth(td), dd = pc.GetDayOfMonth(td); if (yy != y || dd != d || mm != m || days(yy, mm, dd) != i || !IsValid(y, m, d)) { r += string.Format("\r\n{0}: {1}/{2}/{3}, {4}", i, y, m, d, days(y, m, d)); } } return(r); }