/// <summary>返回与指定 <see cref="T:System.DateTime" /> 相距指定年数的 <see cref="T:System.DateTime" />。</summary> /// <returns>将指定年数添加到指定的 <see cref="T:System.DateTime" /> 中时得到的 <see cref="T:System.DateTime" />。</returns> /// <param name="time"> /// <see cref="T:System.DateTime" />,将向其添加 <paramref name="years" />。</param> /// <param name="years">要添加的年数。</param> /// <exception cref="T:System.ArgumentException">结果 <see cref="T:System.DateTime" /> 超出了支持的范围。</exception> public override DateTime AddYears(DateTime time, int years) { int datePart = this.GetDatePart(time.Ticks, 0); int month = this.GetDatePart(time.Ticks, 2); int day = this.GetDatePart(time.Ticks, 3); int num = datePart + years; HebrewCalendar.CheckHebrewYearValue(num, 0, "years"); int monthsInYear = this.GetMonthsInYear(num, 0); if (month > monthsInYear) { month = monthsInYear; } int daysInMonth = this.GetDaysInMonth(num, month); if (day > daysInMonth) { day = daysInMonth; } long ticks = this.ToDateTime(num, month, day, 0, 0, 0, 0).Ticks + time.Ticks % 864000000000L; DateTime supportedDateTime1 = this.MinSupportedDateTime; DateTime supportedDateTime2 = this.MaxSupportedDateTime; Calendar.CheckAddResult(ticks, supportedDateTime1, supportedDateTime2); return(new DateTime(ticks)); }
/// <summary>返回一个 <see cref="T:System.DateTime" />,它设置为指定纪元中的指定日期和时间。</summary> /// <returns>设置为当前纪元中的指定日期和时间的 <see cref="T:System.DateTime" />。</returns> /// <param name="year">表示年份的整数。</param> /// <param name="month">1 到 13 之间的一个整数,它表示月份。</param> /// <param name="day">1 到 30 之间的一个整数,它表示天。</param> /// <param name="hour">0 与 23 之间的一个整数,它表示小时。</param> /// <param name="minute">0 与 59 之间的一个整数,它表示分钟。</param> /// <param name="second">0 与 59 之间的一个整数,它表示秒。</param> /// <param name="millisecond">0 与 999 之间的一个整数,它表示毫秒。</param> /// <param name="era">表示纪元的整数。指定 <see cref="F:System.Globalization.HebrewCalendar.HebrewEra" /> 或 HebrewCalendar.Eras[Calendar.CurrentEra]。</param> /// <exception cref="T:System.ArgumentOutOfRangeException"> /// <paramref name="year" />、<paramref name="month" />、<paramref name="day" /> 或 <paramref name="era" /> 超出了当前 <see cref="T:System.Globalization.HebrewCalendar" /> 对象支持的范围。- 或 -<paramref name="hour" /> 小于 0 或大于 23。- 或 -<paramref name="minute" /> 小于 0 或大于 59。- 或 -<paramref name="second" /> 小于 0 或大于 59。- 或 -<paramref name="millisecond" /> 小于 0 或大于 999。</exception> public override DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era) { HebrewCalendar.CheckHebrewYearValue(year, era, "year"); this.CheckHebrewMonthValue(year, month, era); this.CheckHebrewDayValue(year, month, day, era); DateTime gregorian = HebrewCalendar.HebrewToGregorian(year, month, day, hour, minute, second, millisecond); HebrewCalendar.CheckTicksRange(gregorian.Ticks); return(gregorian); }
/// <summary>确定指定纪元中的指定年份是否为闰年。</summary> /// <returns>如果指定的年是闰年,则为 true;否则为 false。</returns> /// <param name="year">表示年份的整数。</param> /// <param name="era">表示纪元的整数。指定 <see cref="F:System.Globalization.HebrewCalendar.HebrewEra" /> 或 HebrewCalendar.Eras[Calendar.CurrentEra]。</param> /// <exception cref="T:System.ArgumentOutOfRangeException"> /// <paramref name="year" /> 或 <paramref name="era" /> 超出了此日历支持的范围。</exception> public override bool IsLeapYear(int year, int era) { HebrewCalendar.CheckHebrewYearValue(year, era, "year"); return((7L * (long)year + 1L) % 19L < 7L); }
internal static int GetHebrewYearType(int year, int era) { HebrewCalendar.CheckHebrewYearValue(year, era, "year"); return(HebrewCalendar.HebrewTable[(year - 3760 - 1583) * 2 + 1]); }