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

📄 date.cs

📁 OA系统源码 办公应用软件源码 asp.net 开发
💻 CS
📖 第 1 页 / 共 3 页
字号:
	 0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87, //2039 
	 0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x96, //2040 
	 0xA5, 0xC3, 0xA5, 0xB5, 0xA5, 0xA6, 0x87, 0x88, 0x87, 0x78, 0x87, 0x86, //2041 
	 0xA5, 0xB3, 0xA5, 0xB5, 0xA6, 0xA6, 0x88, 0x88, 0x88, 0x78, 0x87, 0x87, //2042 
	 0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87, //2043 
	 0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x88, 0x87, 0x96, //2044 
	 0xA5, 0xC3, 0xA5, 0xB4, 0xA5, 0xA6, 0x87, 0x88, 0x87, 0x78, 0x87, 0x86, //2045 
	 0xA5, 0xB3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x88, 0x78, 0x87, 0x87, //2046 
	 0xA5, 0xB4, 0x96, 0xA5, 0xA6, 0x96, 0x88, 0x88, 0x78, 0x78, 0x87, 0x87, //2047 
	 0x95, 0xB4, 0xA5, 0xB4, 0xA5, 0xA5, 0x97, 0x87, 0x87, 0x88, 0x86, 0x96, //2048 
	 0xA4, 0xC3, 0xA5, 0xA5, 0xA5, 0xA6, 0x97, 0x87, 0x87, 0x78, 0x87, 0x86, //2049 
	 0xA5, 0xC3, 0xA5, 0xB5, 0xA6, 0xA6, 0x87, 0x88, 0x78, 0x78, 0x87, 0x87 //2050 
									  };

    #endregion

    #region Core

    /// <summary>
    /// 取得指定阴历年的阴历闰月月份。
    /// </summary>
    /// <param name="iLunarYear">年份。</param>
    /// <returns>返回指定年的闰月月份。</returns>
    private int GetLeapMonth(ushort iLunarYear)
    {
        byte Flag;
        if (iLunarYear < START_YEAR || iLunarYear > END_YEAR)
        {
            return 0;
        }

        Flag = gLunarMonth[(iLunarYear - START_YEAR) / 2];
        if ((iLunarYear - START_YEAR) % 2 == 0)
        {
            return Flag >> 4;
        }
        else
        {
            return Flag & 0x0F;
        }
    }


    /// <summary>
    /// 计算指定阴历年月的总天数。
    /// </summary>
    /// <param name="iLunarYear">年份。</param>
    /// <param name="iLunarMonth">月份。</param>
    /// <returns>
    /// 返回阴历阴历年月的天数,如果该月为闰月,高字为第二个该月的天数,否则高字为0。
    /// </returns>
    /// <remarks>
    /// 指定年月范围在1901年1月---2050年12月之间。
    /// </remarks>
    private uint GetLunarMonthDays(ushort iLunarYear, ushort iLunarMonth)
    {
        int Height, Low;
        int iBit;
        if (iLunarYear < START_YEAR || iLunarYear > END_YEAR)
        {
            return 30;
        }
        Height = 0;
        Low = 29;
        iBit = 16 - iLunarMonth;
        if (iLunarMonth > GetLeapMonth(iLunarYear) && GetLeapMonth(iLunarYear) > 0)
        {
            iBit--;
        }

        if ((gLunarMonthDay[iLunarYear - START_YEAR] & (1 << iBit)) > 0)
        {
            Low++;
        }

        if (iLunarMonth == GetLeapMonth(iLunarYear))
        {
            if ((gLunarMonthDay[iLunarYear - START_YEAR] & (1 << (iBit - 1))) > 0)
            {
                Height = 30;
            }
            else
            {
                Height = 29;
            }
        }
        return (uint)(Low) | (uint)(Height) << 16; //合成为uint 
    }


    /// <summary>
    /// 计算指定阴历年总天数。
    /// </summary>
    /// <param name="iLunarYear">指定阴历年,范围1901-2050。</param>
    /// <returns>返指定阴历年的总天数。</returns>
    private int GetLunarYearDays(ushort iLunarYear)
    {
        int Days;
        uint tmp;
        if (iLunarYear < START_YEAR || iLunarYear > END_YEAR)
        {
            return 0;
        }

        Days = 0;
        for (ushort i = 1; i <= 12; i++)
        {
            tmp = GetLunarMonthDays(iLunarYear, i);
            Days = Days + ((ushort)(tmp >> 16) & 0xFFFF); //取高位
            Days = Days + (ushort)(tmp); //取低位 
        }
        return Days;
    }


    /// <summary>
    /// 计算从1901年1月1日过iSpanDays天后的阴历日期
    /// </summary>
    /// <param name="iYear">返回的年份。</param>
    /// <param name="iMonth">返回的月份。</param>
    /// <param name="iDay">返回的日子。</param>
    /// <param name="iSpanDays">天数。</param>
    private void CalcLunarDate(out ushort iYear, out ushort iMonth, out ushort iDay, uint iSpanDays)
    {
        uint tmp;
        //阳历1901年2月19日为阴历1901年正月初一 
        //阳历1901年1月1日到2月19日共有49天 
        if (iSpanDays < 49)
        {
            iYear = START_YEAR - 1;
            if (iSpanDays < 19)
            {
                iMonth = 11;
                iDay = (ushort)(11 + iSpanDays);
            }
            else
            {
                iMonth = 12;
                iDay = (ushort)(iSpanDays - 18);
            }
            return;
        }

        //下面从阴历1901年正月初一算起 
        iSpanDays = iSpanDays - 49;
        iYear = START_YEAR;
        iMonth = 1;
        iDay = 1;
        //计算年 
        tmp = (uint)GetLunarYearDays(iYear);
        while (iSpanDays >= tmp)
        {
            iSpanDays = iSpanDays - tmp;
            iYear++;
            tmp = (uint)GetLunarYearDays(iYear);
        }
        //计算月 
        tmp = GetLunarMonthDays(iYear, iMonth); //取低位 
        while (iSpanDays >= tmp)
        {
            iSpanDays = iSpanDays - tmp;
            if (iMonth == GetLeapMonth(iYear))
            {
                tmp = (GetLunarMonthDays(iYear, iMonth) >> 16) & 0xFFFF; //取高位 
                if (iSpanDays < tmp)
                {
                    break;
                }
                iSpanDays = iSpanDays - tmp;
            }
            iMonth++;
            tmp = GetLunarMonthDays(iYear, iMonth); //取低位 
        }
        //计算日 
        iDay = (ushort)(iDay + iSpanDays);
    }

    #endregion

    #region 星座

    /// <summary>
    /// 计算指定当前日期的星座序号。
    /// </summary>
    /// <returns>星座序号。</returns>
    private int GetConstellationIndex()
    {
        int Y, M, D;
        Y = m_Date.Year;
        M = m_Date.Month;
        D = m_Date.Day;
        Y = M * 100 + D;
        if (Y >= 321 && Y <= 419)
        {
            return 0;
        }
        else if (Y >= 420 && Y <= 520)
        {
            return 1;
        }
        else if (Y >= 521 && Y <= 620)
        {
            return 2;
        }
        else if (Y >= 621 && Y <= 722)
        {
            return 3;
        }
        else if (Y >= 723 && Y <= 822)
        {
            return 4;
        }
        else if (Y >= 823 && Y <= 922)
        {
            return 5;
        }
        else if (Y >= 923 && Y <= 1022)
        {
            return 6;
        }
        else if (Y >= 1023 && Y <= 1121)
        {
            return 7;
        }
        else if (Y >= 1122 && Y <= 1221)
        {
            return 8;
        }
        else if (Y >= 1222 || Y <= 119)
        {
            return 9;
        }
        else if (Y >= 120 && Y <= 218)
        {
            return 10;
        }
        else if (Y >= 219 && Y <= 320)
        {
            return 11;
        }
        else
        {
            return -1;
        }
    }


    /// <summary>
    /// 格式化星座序号为星座名称。
    /// </summary>
    /// <param name="ConstellationIndex">星座序号。</param>
    /// <returns>星座名称。</returns>
    private string FormatConstellation(int ConstellationIndex)
    {
        if (ConstellationIndex >= 0 && ConstellationIndex <= 11)
        {
            return ConstellationName[ConstellationIndex];
        }
        else
        {
            return "";
        }
    }

    #endregion

    #region 节气

    /// <summary>
    /// 计算公历当天对应的节气序号。
    /// </summary>
    /// <returns>返回值0-23为节气序号,-1表示不是节气。</returns>
    private int GetSolarTermIndex()
    {
        byte Flag;
        int Day, iYear, iMonth, iDay;
        iYear = m_Date.Year;
        if (iYear < START_YEAR || iYear > END_YEAR)
        {
            return -1;
        }

        iMonth = m_Date.Month;
        iDay = m_Date.Day;
        Flag = gLunarHolDay[(iYear - START_YEAR) * 12 + iMonth - 1];
        if (iDay < 15)
        {
            Day = 15 - ((Flag >> 4) & 0x0f);
        }
        else
        {
            Day = (Flag & 0x0f) + 15;
        }

        if (iDay == Day)
        {
            if (iDay > 15)
            {

⌨️ 快捷键说明

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