• 全球化_农历使用


     
     
     
    一、内置命名空间
    命名空间:System.Globalization
    
    var china = new ChineseLunisolarCalendar();//中国农历实例化
    var day = china.GetDayOfYear(DateTime.Now);  //农历第几天
     
     
     
    二、第三方农历类
     
     /// <summary>
        /// 中国农历
        /// </summary>
        /// 日期:2011-01-13
        /// 作者:http://www.cnblogs.com/zjfree/
        public static class ChinaDate
        {
            private static ChineseLunisolarCalendar china = new ChineseLunisolarCalendar();
            private static Hashtable gHoliday = new Hashtable();
            private static Hashtable nHoliday = new Hashtable();
            private static string[] JQ = { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
            private static int[] JQData = { 0, 21208, 43467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 };
    
            static ChinaDate()
            {
                //公历节日
                gHoliday.Add("0101", "元旦");
                gHoliday.Add("0214", "情人节");
                gHoliday.Add("0305", "雷锋日");
                gHoliday.Add("0308", "妇女节");
                gHoliday.Add("0312", "植树节");
                gHoliday.Add("0315", "消费者权益日");
                gHoliday.Add("0401", "愚人节");
                gHoliday.Add("0501", "劳动节");
                gHoliday.Add("0504", "青年节");
                gHoliday.Add("0601", "儿童节");
                gHoliday.Add("0701", "建党节");
                gHoliday.Add("0801", "建军节");
                gHoliday.Add("0910", "教师节");
                gHoliday.Add("1001", "国庆节");
                gHoliday.Add("1224", "平安夜");
                gHoliday.Add("1225", "圣诞节");
    
                //农历节日
                nHoliday.Add("0101", "春节");
                nHoliday.Add("0115", "元宵节");
                nHoliday.Add("0505", "端午节");
                nHoliday.Add("0815", "中秋节");
                nHoliday.Add("0909", "重阳节");
                nHoliday.Add("1208", "腊八节");
            }
    
            /// <summary>
            /// 获取农历
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetChinaDate(DateTime dt)
            {
                if (dt > china.MaxSupportedDateTime || dt < china.MinSupportedDateTime)
                {
                    //日期范围:1901 年 2 月 19 日 - 2101 年 1 月 28 日
                    throw new Exception(string.Format("日期超出范围!必须在{0}到{1}之间!", china.MinSupportedDateTime.ToString("yyyy-MM-dd"), china.MaxSupportedDateTime.ToString("yyyy-MM-dd")));
                }
                string str = string.Format("{0} {1}{2}", GetYear(dt), GetMonth(dt), GetDay(dt));
                string strJQ = GetSolarTerm(dt);
                if (strJQ != "")
                {
                    str += " (" + strJQ + ")";
                }
                string strHoliday = GetHoliday(dt);
                if (strHoliday != "")
                {
                    str += " " + strHoliday;
                }
                string strChinaHoliday = GetChinaHoliday(dt);
                if (strChinaHoliday != "")
                {
                    str += " " + strChinaHoliday;
                }
    
                return str;
            }
    
            /// <summary>
            /// 获取农历年份
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetYear(DateTime dt)
            {
                int yearIndex = china.GetSexagenaryYear(dt);
                string yearTG = " 甲乙丙丁戊己庚辛壬癸";
                string yearDZ = " 子丑寅卯辰巳午未申酉戌亥";
                string yearSX = " 鼠牛虎兔龙蛇马羊猴鸡狗猪";
                int year = china.GetYear(dt);
                int yTG = china.GetCelestialStem(yearIndex);
                int yDZ = china.GetTerrestrialBranch(yearIndex);
    
                string str = string.Format("[{1}]{2}{3}{0}", year, yearSX[yDZ], yearTG[yTG], yearDZ[yDZ]);
                return str;
            }
    
            /// <summary>
            /// 获取农历月份
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetMonth(DateTime dt)
            {
                int year = china.GetYear(dt);
                int iMonth = china.GetMonth(dt);
                int leapMonth = china.GetLeapMonth(year);
                bool isLeapMonth = iMonth == leapMonth;
                if (leapMonth != 0 && iMonth >= leapMonth)
                {
                    iMonth--;
                }
    
                string szText = "正二三四五六七八九十";
                string strMonth = isLeapMonth ? "" : "";
                if (iMonth <= 10)
                {
                    strMonth += szText.Substring(iMonth - 1, 1);
                }
                else if (iMonth == 11)
                {
                    strMonth += "十一";
                }
                else
                {
                    strMonth += "";
                }
                return strMonth + "";
            }
    
            /// <summary>
            /// 获取农历日期
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetDay(DateTime dt)
            {
                int iDay = china.GetDayOfMonth(dt);
                string szText1 = "初十廿三";
                string szText2 = "一二三四五六七八九十";
                string strDay;
                if (iDay == 20)
                {
                    strDay = "二十";
                }
                else if (iDay == 30)
                {
                    strDay = "三十";
                }
                else
                {
                    strDay = szText1.Substring((iDay - 1) / 10, 1);
                    strDay = strDay + szText2.Substring((iDay - 1) % 10, 1);
                }
                return strDay;
            }
    
            /// <summary>
            /// 获取节气
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetSolarTerm(DateTime dt)
            {
                DateTime dtBase = new DateTime(1900, 1, 6, 2, 5, 0);
                DateTime dtNew;
                double num;
                int y;
                string strReturn = "";
    
                y = dt.Year;
                for (int i = 1; i <= 24; i++)
                {
                    num = 525948.76 * (y - 1900) + JQData[i - 1];
                    dtNew = dtBase.AddMinutes(num);
                    if (dtNew.DayOfYear == dt.DayOfYear)
                    {
                        strReturn = JQ[i - 1];
                    }
                }
    
                return strReturn;
            }
    
            /// <summary>
            /// 获取公历节日
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetHoliday(DateTime dt)
            {
                string strReturn = "";
                object g = gHoliday[dt.Month.ToString("00") + dt.Day.ToString("00")];
                if (g != null)
                {
                    strReturn = g.ToString();
                }
    
                return strReturn;
            }
    
            /// <summary>
            /// 获取农历节日
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetChinaHoliday(DateTime dt)
            {
                string strReturn = "";
                int year = china.GetYear(dt);
                int iMonth = china.GetMonth(dt);
                int leapMonth = china.GetLeapMonth(year);
                int iDay = china.GetDayOfMonth(dt);
                if (china.GetDayOfYear(dt) == china.GetDaysInYear(year))
                {
                    strReturn = "除夕";
                }
                else if (leapMonth != iMonth)
                {
                    if (leapMonth != 0 && iMonth >= leapMonth)
                    {
                        iMonth--;
                    }
                    object n = nHoliday[iMonth.ToString("00") + iDay.ToString("00")];
                    if (n != null)
                    {
                        if (strReturn == "")
                        {
                            strReturn = n.ToString();
                        }
                        else
                        {
                            strReturn += " " + n.ToString();
                        }
                    }
                }
    
                return strReturn;
            }
    }
     
  • 相关阅读:
    Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)
    Educational Codeforces Round 79 (Rated for Div. 2)
    Codeforces Global Round 6
    Codeforces Round #608 (Div. 2)
    Codeforces Round #606 (Div. 2)
    Codeforces Round #603 (Div. 2)
    Educational Codeforces Round 77 (Rated for Div. 2)
    洛谷 P3805 【模板】manacher算法
    HDU 1671 Phone List [字典树]
    2019牛客暑期多校训练营(第一场)E.ABBA
  • 原文地址:https://www.cnblogs.com/gossip/p/4943266.html
Copyright © 2020-2023  润新知