System.Globalization.HijriCalendar.GetDatePart C# (CSharp) Method

GetDatePart() private method

private GetDatePart ( long ticks, int part ) : int
ticks long
part int
return int
        internal virtual int GetDatePart(long ticks, int part) {
            int HijriYear;                   // Hijri year
            int HijriMonth;                  // Hijri month
            int HijriDay;                    // Hijri day
            long NumDays;                 // The calculation buffer in number of days.

            CheckTicksRange(ticks);

            //
            //  Get the absolute date.  The absolute date is the number of days from January 1st, 1 A.D.
            //  1/1/0001 is absolute date 1.
            //
            NumDays = ticks / GregorianCalendar.TicksPerDay + 1;

            //
            //  See how much we need to backup or advance
            //
            NumDays += HijriAdjustment;

            //
            //  Calculate the appromixate Hijri Year from this magic formula.
            //
            HijriYear = (int)(((NumDays - 227013) * 30) / 10631) + 1;

            long daysToHijriYear = DaysUpToHijriYear(HijriYear);            // The absoulte date for HijriYear
            long daysOfHijriYear = GetDaysInYear(HijriYear, CurrentEra);    // The number of days for (HijriYear+1) year.

            if (NumDays < daysToHijriYear) {
                daysToHijriYear -= daysOfHijriYear;
                HijriYear--;
            } else if (NumDays == daysToHijriYear) {
                HijriYear--;
                daysToHijriYear -= GetDaysInYear(HijriYear, CurrentEra);
            } else {
                if (NumDays > daysToHijriYear + daysOfHijriYear) {
                    daysToHijriYear += daysOfHijriYear;
                    HijriYear++;
                }
            }
            if (part == DatePartYear) {
                return (HijriYear);
            }

            //
            //  Calculate the Hijri Month.
            //

            HijriMonth = 1;
            NumDays -= daysToHijriYear;

            if (part == DatePartDayOfYear) {
                return ((int)NumDays);
            }

            while ((HijriMonth <= 12) && (NumDays > HijriMonthDays[HijriMonth - 1])) {
                HijriMonth++;
            }
            HijriMonth--;

            if (part == DatePartMonth) {
                return (HijriMonth);
            }

            //
            //  Calculate the Hijri Day.
            //
            HijriDay = (int)(NumDays - HijriMonthDays[HijriMonth - 1]);

            if (part == DatePartDay) {
                return (HijriDay);
            }
            // Incorrect part value.
            throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_DateTimeParsing"));
        }