public override int GetHashCode() { return(MaxYear.GetHashCode() >> 1 ^ MinYear.GetHashCode() >> 2 ^ MaxDay.GetHashCode() << 1 ^ MinDay.GetHashCode() << 4 ^ MaxHour.GetHashCode() >> 2 ^ MinHour.GetHashCode() >> 1); }
/// <summary> /// 用农历的日期来初使化 /// </summary> /// <param name="cy">农历年</param> /// <param name="cm">农历月</param> /// <param name="cd">农历日</param> /// <param name="leapMonthFlag">闰月标志</param> public ChineseCalendar(int cy, int cm, int cd, bool leapMonthFlag) { int i, temp; CheckChineseDateLimit(cy, cm, cd, leapMonthFlag); ChineseYear = cy; ChineseMonth = cm; ChineseDay = cd; var offset = 0; for (i = MinYear; i < cy; i++) { temp = GetChineseYearDays(i); //求当年农历年天数 offset = offset + temp; } var leap = GetChineseLeapMonth(cy); IsChineseLeapYear = leap != 0; IsChineseLeapMonth = cm == leap && leapMonthFlag; if (IsChineseLeapYear == false || cm < leap) //当年没有闰月||计算月份小于闰月 { for (i = 1; i < cm; i++) { temp = GetChineseMonthDays(cy, i); //计算非闰月天数 offset = offset + temp; } //检查日期是否大于最大天 if (cd > GetChineseMonthDays(cy, cm)) { throw new ChineseCalendarException("不合法的农历日期"); } offset = offset + cd; //加上当月的天数 } else //是闰年,且计算月份大于或等于闰月 { for (i = 1; i < cm; i++) { temp = GetChineseMonthDays(cy, i); //计算非闰月天数 offset = offset + temp; } if (cm > leap) //计算月大于闰月 { temp = GetChineseLeapMonthDays(cy); //计算闰月天数 offset = offset + temp; //加上闰月天数 if (cd > GetChineseMonthDays(cy, cm)) { throw new ChineseCalendarException("不合法的农历日期"); } offset = offset + cd; } else //计算月等于闰月 { //如果需要计算的是闰月,则应首先加上与闰月对应的普通月的天数 if (IsChineseLeapMonth) //计算月为闰月 { temp = GetChineseMonthDays(cy, cm); //计算非闰月天数 offset = offset + temp; } if (cd > GetChineseLeapMonthDays(cy)) { throw new ChineseCalendarException("不合法的农历日期"); } offset = offset + cd; } } Date = MinDay.AddDays(offset); }