internal int GetDatePart(long ticks, int part) { PersianCalendar.CheckTicksRange(ticks); long numberOfDays = ticks / 864000000000L + 1L; int year = (int)Math.Floor((double)(CalendricalCalculationsHelper.PersianNewYearOnOrBefore(numberOfDays) - PersianCalendar.PersianEpoch) / 365.242189 + 0.5) + 1; if (part == 0) { return(year); } int ordinalDay = (int)(numberOfDays - CalendricalCalculationsHelper.GetNumberOfDays(this.ToDateTime(year, 1, 1, 0, 0, 0, 0, 1))); if (part == 1) { return(ordinalDay); } int month = PersianCalendar.MonthFromOrdinalDay(ordinalDay); if (part == 2) { return(month); } int num = ordinalDay - PersianCalendar.DaysInPreviousMonths(month); if (part == 3) { return(num); } throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_DateTimeParsing")); }
private long GetAbsoluteDatePersian(int year, int month, int day) { if (year < 1 || year > 9378 || (month < 1 || month > 12)) { throw new ArgumentOutOfRangeException((string)null, Environment.GetResourceString("ArgumentOutOfRange_BadYearMonthDay")); } int num1 = PersianCalendar.DaysInPreviousMonths(month) + day - 1; int num2 = (int)(365.242189 * (double)(year - 1)); return(CalendricalCalculationsHelper.PersianNewYearOnOrBefore(PersianCalendar.PersianEpoch + (long)num2 + 180L) + (long)num1); }