/// <summary>确定指定的日期是否为闰日。</summary> /// <returns>如果指定的日期是闰日,则为 true;否则为 false。返回值始终为 false 因为 <see cref="T:System.Globalization.UmAlQuraCalendar" /> 类不支持闰日。</returns> /// <param name="year">年份。</param> /// <param name="month">1 到 12 之间的一个整数,用于表示月。</param> /// <param name="day">1 到 30 之间的一个整数,用于表示日。</param> /// <param name="era">纪元。指定 UmAlQuraCalendar.Eras[UmAlQuraCalendar.CurrentEra] 或 <see cref="F:System.Globalization.UmAlQuraCalendar.UmAlQuraEra" />。</param> /// <exception cref="T:System.ArgumentOutOfRangeException"> /// <paramref name="year" />、<paramref name="month" />、<paramref name="day" /> 或 <paramref name="era" /> 超出了 <see cref="T:System.Globalization.UmAlQuraCalendar" /> 类支持的范围。</exception> public override bool IsLeapDay(int year, int month, int day, int era) { if (day >= 1 && day <= 29) { UmAlQuraCalendar.CheckYearMonthRange(year, month, era); return(false); } int daysInMonth = this.GetDaysInMonth(year, month, era); if (day < 1 || day > daysInMonth) { throw new ArgumentOutOfRangeException("day", string.Format((IFormatProvider)CultureInfo.CurrentCulture, Environment.GetResourceString("ArgumentOutOfRange_Day"), (object)daysInMonth, (object)month)); } return(false); }
/// <summary>返回设置为指定的日期、时间和纪元的 <see cref="T:System.DateTime" />。</summary> /// <returns>设置为当前纪元中的指定日期和时间的 <see cref="T:System.DateTime" />。</returns> /// <param name="year">年份。</param> /// <param name="month">1 到 12 之间的一个整数,用于表示月。</param> /// <param name="day">1 到 29 之间的一个整数,用于表示日。</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">纪元。指定 UmAlQuraCalendar.Eras[UmAlQuraCalendar.CurrentEra] 或 <see cref="F:System.Globalization.UmAlQuraCalendar.UmAlQuraEra" />。</param> /// <exception cref="T:System.ArgumentOutOfRangeException"> /// <paramref name="year" />、<paramref name="month" />、<paramref name="day" /> 或 <paramref name="era" /> 超出了 <see cref="T:System.Globalization.UmAlQuraCalendar" /> 类支持的范围。- 或 -<paramref name="hour" /> 小于零或大于 23。- 或 -<paramref name="minute" /> 小于零或大于 59。- 或 -<paramref name="second" /> 小于零或大于 59。- 或 -<paramref name="millisecond" /> 小于零或大于 999。</exception> public override DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era) { if (day >= 1 && day <= 29) { UmAlQuraCalendar.CheckYearMonthRange(year, month, era); } else { int daysInMonth = this.GetDaysInMonth(year, month, era); if (day < 1 || day > daysInMonth) { throw new ArgumentOutOfRangeException("day", string.Format((IFormatProvider)CultureInfo.CurrentCulture, Environment.GetResourceString("ArgumentOutOfRange_Day"), (object)daysInMonth, (object)month)); } } long absoluteDateUmAlQura = UmAlQuraCalendar.GetAbsoluteDateUmAlQura(year, month, day); if (absoluteDateUmAlQura >= 0L) { return(new DateTime(absoluteDateUmAlQura * 864000000000L + Calendar.TimeToTicks(hour, minute, second, millisecond))); } throw new ArgumentOutOfRangeException((string)null, Environment.GetResourceString("ArgumentOutOfRange_BadYearMonthDay")); }
/// <summary>确定指定纪元年份中的指定月份是否为闰月。</summary> /// <returns>总为 false,因为 <see cref="T:System.Globalization.UmAlQuraCalendar" /> 类不支持闰月。</returns> /// <param name="year">年份。</param> /// <param name="month">1 到 12 之间的一个整数,用于表示月。</param> /// <param name="era">纪元。指定 UmAlQuraCalendar.Eras[UmAlQuraCalendar.CurrentEra] 或 <see cref="F:System.Globalization.UmAlQuraCalendar.UmAlQuraEra" />。</param> /// <exception cref="T:System.ArgumentOutOfRangeException"> /// <paramref name="year" />、<paramref name="month" /> 或 <paramref name="era" /> 超出了 <see cref="T:System.Globalization.UmAlQuraCalendar" /> 类支持的范围。</exception> public override bool IsLeapMonth(int year, int month, int era) { UmAlQuraCalendar.CheckYearMonthRange(year, month, era); return(false); }
/// <summary>计算指定纪元年份的指定月份中的天数。</summary> /// <returns>指定纪元年份中指定月份的天数。返回值是 29(在平年中)或 30(在闰年中)。</returns> /// <param name="year">年份。</param> /// <param name="month">1 到 12 之间的一个整数,用于表示月。</param> /// <param name="era">纪元。指定 UmAlQuraCalendar.Eras[UmAlQuraCalendar.CurrentEra] 或 <see cref="F:System.Globalization.UmAlQuraCalendar.UmAlQuraEra" />。</param> /// <exception cref="T:System.ArgumentOutOfRangeException"> /// <paramref name="year" />、<paramref name="month" /> 或 <paramref name="era" /> 超出了 <see cref="T:System.Globalization.UmAlQuraCalendar" /> 类支持的范围。</exception> public override int GetDaysInMonth(int year, int month, int era) { UmAlQuraCalendar.CheckYearMonthRange(year, month, era); return((UmAlQuraCalendar.HijriYearInfo[year - 1318].HijriMonthsLengthFlags & 1 << month - 1) == 0 ? 29 : 30); }