Beispiel #1
0
 public override int GetHashCode()
 {
     return(MaxYear.GetHashCode() >> 1 ^
            MinYear.GetHashCode() >> 2 ^
            MaxDay.GetHashCode() << 1 ^
            MinDay.GetHashCode() << 4 ^
            MaxHour.GetHashCode() >> 2 ^
            MinHour.GetHashCode() >> 1);
 }
Beispiel #2
0
        /// <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);
        }