⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cndate.cs

📁 c#常用类库大全
💻 CS
📖 第 1 页 / 共 5 页
字号:
    #endregion

    #region CheckChineseDateLimit
    /// <summary>
    /// 检查农历日期是否合理
    /// </summary>
    private void CheckChineseDateLimit(int year, int month, int day, bool leapMonth)
    {
        if ((year < MinYear) || (year > MaxYear))
        {
            throw new Exception("非法农历日期");
        }
        if ((month < 1) || (month > 12))
        {
            throw new Exception("非法农历日期");
        }
        if ((day < 1) || (day > 30)) //中国的月最多30天
        {
            throw new Exception("非法农历日期");
        }
        int leap = GetChineseLeapMonth(year);// 计算该年应该闰哪个月
        if ((leapMonth == true) && (month != leap))
        {
            throw new Exception("非法农历日期");
        }
    }
    #endregion

    #region ConvertNumToChineseNum
    /// <summary>
    /// 将0-9转成汉字形式
    /// </summary>
    private string ConvertNumToChineseNum(char n)
    {
        if ((n < '0') || (n > '9')) return "";
        switch (n)
        {
            case '0':
                return HZNum[0].ToString();
            case '1':
                return HZNum[1].ToString();
            case '2':
                return HZNum[2].ToString();
            case '3':
                return HZNum[3].ToString();
            case '4':
                return HZNum[4].ToString();
            case '5':
                return HZNum[5].ToString();
            case '6':
                return HZNum[6].ToString();
            case '7':
                return HZNum[7].ToString();
            case '8':
                return HZNum[8].ToString();
            case '9':
                return HZNum[9].ToString();
            default:
                return "";
        }
    }
    #endregion

    #region BitTest32
    /// <summary>
    /// 测试某位是否为真
    /// </summary>
    private bool BitTest32(int num, int bitpostion)
    {
        if ((bitpostion > 31) || (bitpostion < 0))
            throw new Exception("Error Param: bitpostion[0-31]:" + bitpostion.ToString());

        int bit = 1 << bitpostion;

        if ((num & bit) == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    #endregion

    #region ConvertDayOfWeek
    /// <summary>
    /// 将星期几转成数字表示
    /// </summary>
    private int ConvertDayOfWeek(DayOfWeek dayOfWeek)
    {
        switch (dayOfWeek)
        {
            case DayOfWeek.Sunday:
                return 1;
            case DayOfWeek.Monday:
                return 2;
            case DayOfWeek.Tuesday:
                return 3;
            case DayOfWeek.Wednesday:
                return 4;
            case DayOfWeek.Thursday:
                return 5;
            case DayOfWeek.Friday:
                return 6;
            case DayOfWeek.Saturday:
                return 7;
            default:
                return 0;
        }
    }
    #endregion

    #region CompareWeekDayHoliday
    /// <summary>
    /// 比较当天是不是指定的第周几
    /// </summary>
    private bool CompareWeekDayHoliday(DateTime date, int month, int week, int day)
    {
        bool ret = false;

        if (date.Month == month) //月份相同
        {
            if (ConvertDayOfWeek(date.DayOfWeek) == day) //星期几相同
            {
                DateTime firstDay = new DateTime(date.Year, date.Month, 1);//生成当月第一天
                int i = ConvertDayOfWeek(firstDay.DayOfWeek);
                int firWeekDays = 7 - ConvertDayOfWeek(firstDay.DayOfWeek) + 1; //计算第一周剩余天数

                if (i > day)
                {
                    if ((week - 1) * 7 + day + firWeekDays == date.Day)
                    {
                        ret = true;
                    }
                }
                else
                {
                    if (day + firWeekDays + (week - 2) * 7 == date.Day)
                    {
                        ret = true;
                    }
                }
            }
        }

        return ret;
    }
    #endregion
    #endregion

    #region  属性
    #region 节日
    #region newCalendarHoliday
    /// <summary>
    /// 计算中国农历节日
    /// </summary>
    public string newCalendarHoliday
    {
        get
        {
            string tempStr = "";
            if (this._cIsLeapMonth == false) //闰月不计算节日
            {
                foreach (LunarHolidayStruct lh in lHolidayInfo)
                {
                    if ((lh.Month == this._cMonth) && (lh.Day == this._cDay))
                    {

                        tempStr = lh.HolidayName;
                        break;

                    }
                }

                //对除夕进行特别处理
                if (this._cMonth == 12)
                {
                    int i = GetChineseMonthDays(this._cYear, 12); //计算当年农历12月的总天数
                    if (this._cDay == i) //如果为最后一天
                    {
                        tempStr = "除夕";
                    }
                }
            }
            return tempStr;
        }
    }
    #endregion

    #region WeekDayHoliday
    /// <summary>
    /// 按某月第几周第几日计算的节日
    /// </summary>
    public string WeekDayHoliday
    {
        get
        {
            string tempStr = "";
            foreach (WeekHolidayStruct wh in wHolidayInfo)
            {
                if (CompareWeekDayHoliday(_date, wh.Month, wh.WeekAtMonth, wh.WeekDay))
                {
                    tempStr = wh.HolidayName;
                    break;
                }
            }
            return tempStr;
        }
    }
    #endregion

    #region DateHoliday
    /// <summary>
    /// 按公历日计算的节日
    /// </summary>
    public string DateHoliday
    {
        get
        {
            string tempStr = "";

            foreach (SolarHolidayStruct sh in sHolidayInfo)
            {
                if ((sh.Month == _date.Month) && (sh.Day == _date.Day))
                {
                    tempStr = sh.HolidayName;
                    break;
                }
            }
            return tempStr;
        }
    }
    #endregion
    #endregion

    #region 公历日期
    #region Date
    /// <summary>
    /// 取对应的公历日期
    /// </summary>
    public DateTime Date
    {
        get { return _date; }
        set { _date = value; }
    }
    #endregion

    #region WeekDay
    /// <summary>
    /// 取星期几
    /// </summary>
    public DayOfWeek WeekDay
    {
        get { return _date.DayOfWeek; }
    }
    #endregion

    #region WeekDayStr
    /// <summary>
    /// 周几的字符
    /// </summary>
    public string WeekDayStr
    {
        get
        {
            switch (_date.DayOfWeek)
            {
                case DayOfWeek.Sunday:
                    return "星期日";
                case DayOfWeek.Monday:
                    return "星期一";
                case DayOfWeek.Tuesday:
                    return "星期二";
                case DayOfWeek.Wednesday:
                    return "星期三";
                case DayOfWeek.Thursday:
                    return "星期四";
                case DayOfWeek.Friday:
                    return "星期五";
                default:
                    return "星期六";
            }
        }
    }
    #endregion

    #region DateString
    /// <summary>
    /// 公历日期中文表示法 如一九九七年七月一日
    /// </summary>
    public string DateString
    {
        get
        {
            return "公元" + this._date.ToLongDateString();
        }
    }
    #endregion

    #region IsLeapYear
    /// <summary>
    /// 当前是否公历闰年
    /// </summary>
    public bool IsLeapYear
    {
        get
        {
            return DateTime.IsLeapYear(this._date.Year);
        }
    }
    #endregion

    #region ChineseConstellation
    /// <summary>
    /// 28星宿计算
    /// </summary>
    public string ChineseConstellation
    {
        get
        {
            int offset = 0;
            int modStarDay = 0;

            TimeSpan ts = this._date - ChineseConstellationReferDay;
            offset = ts.Days;
            modStarDay = offset % 28;
            return (modStarDay >= 0 ? _chineseConstellationName[modStarDay] : _chineseConstellationName[27 + modStarDay]);
        }
    }
    #endregion

    #region ChineseHour
    /// <summary>
    /// 时辰
    /// </summary>
    public string ChineseHour
    {
        get
        {
            return GetChineseHour(_datetime);
        }
    }
    #endregion

    #endregion

    #region 农历日期
    #region IsChineseLeapMonth
    /// <summary>
    /// 是否闰月
    /// </summary>
    public bool IsChineseLeapMonth
    {
        get { return this._cIsLeapMonth; }
    }
    #endregion

    #region IsChineseLeapYear
    /// <summary>
    /// 当年是否有闰月
    /// </summary>
    public bool IsChineseLeapYear
    {
        get
        {
            return this._cIsLeapYear;
        }
    }
    #endregion

    #region ChineseDay
    /// <summary>
    /// 农历日
    /// </summary>
    public int ChineseDay
    {
        get { return this._cDay; }
    }
    #endregion

    #region ChineseDayString
    /// <summary>
    /// 农历日中文表示

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -