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")); }
/// <summary>返回指定 <see cref="T:System.DateTime" /> 对象中的纪元。</summary> /// <returns>始终返回 <see cref="F:System.Globalization.PersianCalendar.PersianEra" />。</returns> /// <param name="time">要读取的 <see cref="T:System.DateTime" />。</param> /// <exception cref="T:System.ArgumentOutOfRangeException"> /// <paramref name="time" /> 参数表示的日期小于 <see cref="P:System.Globalization.PersianCalendar.MinSupportedDateTime" /> 或大于 <see cref="P:System.Globalization.PersianCalendar.MaxSupportedDateTime" />。</exception> public override int GetEra(DateTime time) { PersianCalendar.CheckTicksRange(time.Ticks); return(PersianCalendar.PersianEra); }