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

📄 cndate.cs

📁 c#常用类库大全
💻 CS
📖 第 1 页 / 共 5 页
字号:
    /// </summary>
    public string ChineseDayString
    {
        get
        {
            switch (this._cDay)
            {
                case 0:
                    return "";
                case 10:
                    return "初十";
                case 20:
                    return "二十";
                case 30:
                    return "三十";
                default:
                    return nStr2[(int)(_cDay / 10)].ToString() + nStr1[_cDay % 10].ToString();

            }
        }
    }
    #endregion

    #region ChineseMonth
    /// <summary>
    /// 农历的月份
    /// </summary>
    public int ChineseMonth
    {
        get { return this._cMonth; }
    }
    #endregion

    #region ChineseMonthString
    /// <summary>
    /// 农历月份字符串
    /// </summary>
    public string ChineseMonthString
    {
        get
        {
            return _monthString[this._cMonth];
        }
    }
    #endregion

    #region ChineseYear
    /// <summary>
    /// 取农历年份
    /// </summary>
    public int ChineseYear
    {
        get { return this._cYear; }
    }
    #endregion

    #region ChineseYearString
    /// <summary>
    /// 取农历年字符串如,一九九七年
    /// </summary>
    public string ChineseYearString
    {
        get
        {
            string tempStr = "";
            string num = this._cYear.ToString();
            for (int i = 0; i < 4; i++)
            {
                tempStr += ConvertNumToChineseNum(num[i]);
            }
            return tempStr + "年";
        }
    }
    #endregion

    #region ChineseDateString
    /// <summary>
    /// 取农历日期表示法:农历一九九七年正月初五
    /// </summary>
    public string ChineseDateString
    {
        get
        {
            if (this._cIsLeapMonth == true)
            {
                return "农历" + ChineseYearString + "闰" + ChineseMonthString + ChineseDayString;
            }
            else
            {
                return "农历" + ChineseYearString + ChineseMonthString + ChineseDayString;
            }
        }
    }
    #endregion

    #region ChineseTwentyFourDay
    /// <summary>
    /// 定气法计算二十四节气,二十四节气是按地球公转来计算的,并非是阴历计算的
    /// </summary>
    /// <remarks>
    /// 节气的定法有两种。古代历法采用的称为"恒气",即按时间把一年等分为24份,
    /// 每一节气平均得15天有余,所以又称"平气"。现代农历采用的称为"定气",即
    /// 按地球在轨道上的位置为标准,一周360°,两节气之间相隔15°。由于冬至时地
    /// 球位于近日点附近,运动速度较快,因而太阳在黄道上移动15°的时间不到15天。
    /// 夏至前后的情况正好相反,太阳在黄道上移动较慢,一个节气达16天之多。采用
    /// 定气时可以保证春、秋两分必然在昼夜平分的那两天。
    /// </remarks>
    public string ChineseTwentyFourDay
    {
        get
        {
            DateTime baseDateAndTime = new DateTime(1900, 1, 6, 2, 5, 0); //#1/6/1900 2:05:00 AM#
            DateTime newDate;
            double num;
            int y;
            string tempStr = "";

            y = this._date.Year;

            for (int i = 1; i <= 24; i++)
            {
                num = 525948.76 * (y - 1900) + sTermInfo[i - 1];

                newDate = baseDateAndTime.AddMinutes(num);//按分钟计算
                if (newDate.DayOfYear == _date.DayOfYear)
                {
                    tempStr = SolarTerm[i - 1];
                    break;
                }
            }
            return tempStr;
        }
    }

    //当前日期前一个最近节气
    public string ChineseTwentyFourPrevDay
    {
        get
        {
            DateTime baseDateAndTime = new DateTime(1900, 1, 6, 2, 5, 0); //#1/6/1900 2:05:00 AM#
            DateTime newDate;
            double num;
            int y;
            string tempStr = "";

            y = this._date.Year;

            for (int i = 24; i >= 1; i--)
            {
                num = 525948.76 * (y - 1900) + sTermInfo[i - 1];

                newDate = baseDateAndTime.AddMinutes(num);//按分钟计算

                if (newDate.DayOfYear < _date.DayOfYear)
                {
                    tempStr = string.Format("{0}[{1}]", SolarTerm[i - 1], newDate.ToString("yyyy-MM-dd"));
                    break;
                }
            }

            return tempStr;
        }

    }

    //当前日期后一个最近节气
    public string ChineseTwentyFourNextDay
    {
        get
        {
            DateTime baseDateAndTime = new DateTime(1900, 1, 6, 2, 5, 0); //#1/6/1900 2:05:00 AM#
            DateTime newDate;
            double num;
            int y;
            string tempStr = "";

            y = this._date.Year;

            for (int i = 1; i <= 24; i++)
            {
                num = 525948.76 * (y - 1900) + sTermInfo[i - 1];

                newDate = baseDateAndTime.AddMinutes(num);//按分钟计算

                if (newDate.DayOfYear > _date.DayOfYear)
                {
                    tempStr = string.Format("{0}[{1}]", SolarTerm[i - 1], newDate.ToString("yyyy-MM-dd"));
                    break;
                }
            }
            return tempStr;
        }

    }
    #endregion
    #endregion

    #region 星座
    /// <summary>
    /// 计算指定日期的星座序号 
    /// </summary>
    public string Constellation
    {
        get
        {
            int index = 0;
            int y, m, d;
            y = _date.Year;
            m = _date.Month;
            d = _date.Day;
            y = m * 100 + d;

            if (((y >= 321) && (y <= 419))) { index = 0; }
            else if ((y >= 420) && (y <= 520)) { index = 1; }
            else if ((y >= 521) && (y <= 620)) { index = 2; }
            else if ((y >= 621) && (y <= 722)) { index = 3; }
            else if ((y >= 723) && (y <= 822)) { index = 4; }
            else if ((y >= 823) && (y <= 922)) { index = 5; }
            else if ((y >= 923) && (y <= 1022)) { index = 6; }
            else if ((y >= 1023) && (y <= 1121)) { index = 7; }
            else if ((y >= 1122) && (y <= 1221)) { index = 8; }
            else if ((y >= 1222) || (y <= 119)) { index = 9; }
            else if ((y >= 120) && (y <= 218)) { index = 10; }
            else if ((y >= 219) && (y <= 320)) { index = 11; }
            else { index = 0; }

            return _constellationName[index];
        }
    }
    #endregion

    #region 属相
    #region Animal
    /// <summary>
    /// 计算属相的索引,注意虽然属相是以农历年来区别的,但是目前在实际使用中是按公历来计算的
    /// 鼠年为1,其它类推
    /// </summary>
    public int Animal
    {
        get
        {
            int offset = _date.Year - AnimalStartYear;
            return (offset % 12) + 1;
        }
    }
    #endregion

    #region AnimalString
    /// <summary>
    /// 取属相字符串
    /// </summary>
    public string AnimalString
    {
        get
        {
            int offset = _date.Year - AnimalStartYear; //阳历计算
            //int offset = this._cYear - AnimalStartYear; 农历计算
            return animalStr[offset % 12].ToString();
        }
    }
    #endregion
    #endregion

    #region 天干地支
    #region GanZhiYearString
    /// <summary>
    /// 取农历年的干支表示法如 乙丑年
    /// </summary>
    public string GanZhiYearString
    {
        get
        {
            string tempStr;
            int i = (this._cYear - GanZhiStartYear) % 60; //计算干支
            tempStr = ganStr[i % 10].ToString() + zhiStr[i % 12].ToString() + "年";
            return tempStr;
        }
    }
    #endregion

    #region GanZhiMonthString
    /// <summary>
    /// 取干支的月表示字符串,注意农历的闰月不记干支
    /// </summary>
    public string GanZhiMonthString
    {
        get
        {
            //每个月的地支总是固定的,而且总是从寅月开始
            int zhiIndex;
            string zhi;
            if (this._cMonth > 10)
            {
                zhiIndex = this._cMonth - 10;
            }
            else
            {
                zhiIndex = this._cMonth + 2;
            }
            zhi = zhiStr[zhiIndex - 1].ToString();

            //根据当年的干支年的干来计算月干的第一个
            int ganIndex = 1;
            string gan;
            int i = (this._cYear - GanZhiStartYear) % 60; //计算干支
            switch (i % 10)
            {
                #region ...
                case 0: //甲
                    ganIndex = 3;
                    break;
                case 1: //乙
                    ganIndex = 5;
                    break;
                case 2: //丙
                    ganIndex = 7;
                    break;
                case 3: //丁
                    ganIndex = 9;
                    break;
                case 4: //戊
                    ganIndex = 1;
                    break;
                case 5: //己
                    ganIndex = 3;
                    break;
                case 6: //庚
                    ganIndex = 5;
                    break;
                case 7: //辛
                    ganIndex = 7;
                    break;
                case 8: //壬
                    ganIndex = 9;
                    break;
                case 9: //癸
                    ganIndex = 1;
                    break;
                #endregion
            }
            gan = ganStr[(ganIndex + this._cMonth - 2) % 10].ToString();

            return gan + zhi + "月";
        }
    }
    #endregion

    #region GanZhiDayString
    /// <summary>
    /// 取干支日表示法
    /// </summary>
    public string GanZhiDayString
    {
        get
        {
            int i, offset;
            TimeSpan ts = this._date - GanZhiStartDay;
            offset = ts.Days;
            i = offset % 60;
            return ganStr[i % 10].ToString() + zhiStr[i % 12].ToString() + "日";
        }
    }
    #endregion

    #region GanZhiDateString
    /// <summary>
    /// 取当前日期的干支表示法如 甲子年乙丑月丙庚日
    /// </summary>
    public string GanZhiDateString
    {
        get
        {
            return GanZhiYearString + GanZhiMonthString + GanZhiDayString;
        }
    }
    #endregion
    #endregion
    #endregion
}



⌨️ 快捷键说明

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