Ejemplo n.º 1
0
        /// <summary>
        /// 获取农历
        /// </summary>
        public StructDateFullInfo GetChinaDate(DateTime dt)
        {
            var cd    = new StructDateFullInfo();
            var year  = dt.Year;
            var month = dt.Month;
            var date  = dt.Day;
            var l     = CalElement(year, month, date);

            cd.Cyear   = (int)l[0];
            cd.Cmonth  = (int)l[1];
            cd.Cday    = (int)l[2];
            cd.Scyear  = cyclical(year);
            cd.CnAnm   = AnimalsYear(year);
            cd.Scmonth = _nStr1[(int)l[1]];
            cd.Scday   = GetCDay((int)(l[2]));
            var smd = dt.ToString("MMdd");

            var lmd = FormatDate(cd.Cmonth, cd.Cday);

            for (var i = 0; i < _solarTerm.Length; i++)
            {
                var s1 = GetSolarTermDay(dt.Year, i).ToString("MMdd");
                if (s1.Equals(dt.ToString("MMdd")))
                {
                    cd.Solarterm = _solarTerm[i];
                    break;
                }
            }
            foreach (var s in _sFtv)
            {
                var s1 = s.Substring(0, 4);
                if (s1.Equals(smd))
                {
                    cd.CnFtvs = s.Substring(4, s.Length - 4);
                    break;
                }
            }
            foreach (var s in _lFtv)
            {
                var s1 = s.Substring(0, 4);
                if (s1.Equals(lmd))
                {
                    cd.CnFtvl = s.Substring(4, s.Length - 4);
                    break;
                }
            }
            dt    = dt.AddDays(1);
            year  = dt.Year;
            month = dt.Month;
            date  = dt.Day;
            l     = CalElement(year, month, date);
            lmd   = FormatDate((int)l[1], (int)l[2]);
            if (lmd.Equals("0101"))
            {
                cd.CnFtvl = "除夕";
            }
            return(cd);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取农历
        /// </summary>
        /// <param name="dt">阳历日期</param>
        public static StructDateFullInfo getChinaDate(this DateTime dt)
        {
            StructDateFullInfo cd = new StructDateFullInfo();
            int year  = dt.Year;
            int month = dt.Month;
            int date  = dt.Day;

            long[] l = calElement(year, month, date);
            cd.Cyear   = (int)l[0];
            cd.Cmonth  = (int)l[1];
            cd.Cday    = (int)l[2];
            cd.Scyear  = cyclical(year);
            cd.cnAnm   = AnimalsYear(year);
            cd.Scmonth = nStr1[(int)l[1]];
            cd.Scday   = GetCDay((int)l[2]);
            string smd = dt.ToString("MMdd");

            string lmd = FormatDate(cd.Cmonth, cd.Cday);

            for (int i = 0; i < solarTerm.Length; i++)
            {
                string s1 = GetSolarTermDay(dt.Year, i).ToString("MMdd");
                if (s1.Equals(dt.ToString("MMdd")))
                {
                    cd.solarterm = solarTerm[i];
                    break;
                }
            }
            foreach (string s in sFtv)
            {
                string s1 = s.Substring(0, 4);
                if (s1.Equals(smd))
                {
                    cd.cnFtvs = s.Substring(4, s.Length - 4);
                    break;
                }
            }
            foreach (string s in lFtv)
            {
                string s1 = s.Substring(0, 4);
                if (s1.Equals(lmd))
                {
                    cd.cnFtvl = s.Substring(4, s.Length - 4);
                    break;
                }
            }
            dt    = dt.AddDays(1);
            year  = dt.Year;
            month = dt.Month;
            date  = dt.Day;
            l     = calElement(year, month, date);
            lmd   = FormatDate((int)l[1], (int)l[2]);
            if (lmd.Equals("0101"))
            {
                cd.cnFtvl = "除夕";
            }
            return(cd);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 得到日期信息
        /// </summary>
        /// <param name="d">待检查的日子</param>
        /// <returns>日期信息</returns>
        public static StructDateFullInfo GetDateInfo(this DateTime d)
        {
            // xml文件属性-生成操作-嵌入的资源
            string calendarXmlData = ReadFileFromEmbedded("Core.Common" + "CCalendarData.xml");

            StructDateFullInfo dayinfo = new StructDateFullInfo();
            structDate         day     = GetLunar(d);

            dayinfo.IsLeap = day.isLeap;

            dayinfo.Year     = d.Year;
            dayinfo.Cyear    = day.year;
            dayinfo.Scyear   = animals[(day.year - 4) % 12];
            dayinfo.CyearCyl = Cyclical(day.yearCyl); //干支年

            dayinfo.Month     = d.Month;
            dayinfo.Cmonth    = day.month;
            dayinfo.Scmonth   = cMonthName[day.month];
            dayinfo.CmonthCyl = Cyclical(day.monthCyl); //干支月

            dayinfo.Day     = d.Day;
            dayinfo.Cday    = day.day;
            dayinfo.Scday   = GetCDay(day.day);     //日子
            dayinfo.CdayCyl = Cyclical(day.dayCyl); //干支日

            switch (d.DayOfWeek)
            {
            case DayOfWeek.Sunday:
                dayinfo.DayInWeek = "星期日";
                break;

            case DayOfWeek.Monday:
                dayinfo.DayInWeek = "星期一";
                break;

            case DayOfWeek.Tuesday:
                dayinfo.DayInWeek = "星期二";
                break;

            case DayOfWeek.Wednesday:
                dayinfo.DayInWeek = "星期三";
                break;

            case DayOfWeek.Thursday:
                dayinfo.DayInWeek = "星期四";
                break;

            case DayOfWeek.Friday:
                dayinfo.DayInWeek = "星期五";
                break;

            case DayOfWeek.Saturday:
                dayinfo.DayInWeek = "星期六";
                break;

            default:
                dayinfo.DayInWeek = "星期?";
                break;
            }

            //节气
            //每个月有两个节气
            int d1 = GetSolarTermDay(d.Year, d.Month * 2 - 1).Day;
            int d2 = GetSolarTermDay(d.Year, d.Month * 2).Day;

            if (dayinfo.Day == d1)
            {
                dayinfo.solarterm = solarTerm[d.Month * 2 - 2];
            }
            else if (dayinfo.Day == d2)
            {
                dayinfo.solarterm = solarTerm[d.Month * 2 - 1];
            }
            else
            {
                dayinfo.solarterm = "";
            }

            //节日及问候语
            dayinfo.Info     = "";
            dayinfo.Feast    = "";
            dayinfo.Image    = "";
            dayinfo.SayHello = false;
            XmlDocument feastdoc = new XmlDocument();

            feastdoc.LoadXml(calendarXmlData);

            //公历
            XmlNodeList nodeList = feastdoc.SelectNodes("descendant::AD/feast[@day='" + d.ToString("MMdd") + "']");

            foreach (XmlNode root in nodeList)
            {
                dayinfo.Feast += root.Attributes["name"].InnerText + " ";
                if (root.Attributes["sayhello"].InnerText == "yes")
                {
                    //需要显示节日问候语
                    dayinfo.Info = root["hello"].InnerText;
                    //看看是否需要计算周年
                    if (root["startyear"] != null)
                    {
                        int startyear = Convert.ToInt32(root["startyear"].InnerText);
                        dayinfo.Info = dayinfo.Info.Replace("_YEARS_", (d.Year - startyear).ToString());
                    }
                    dayinfo.Image    = root["img"].InnerText;
                    dayinfo.SayHello = true;
                }
            }

            //农历
            string smmdd = "";

            smmdd  = dayinfo.Cmonth.ToString().Length == 2 ? dayinfo.Cmonth.ToString() : "0" + dayinfo.Cmonth;
            smmdd += dayinfo.Cday.ToString().Length == 2 ? dayinfo.Cday.ToString() : "0" + dayinfo.Cday;
            XmlNode feast = feastdoc.SelectSingleNode("descendant::LUNAR/feast[@day='" + smmdd + "']");

            if (feast != null)
            {
                dayinfo.Feast += feast.Attributes["name"].InnerText;

                if (feast.Attributes["sayhello"].InnerText == "yes")
                {
                    //需要显示节日问候语
                    dayinfo.Info    += feast["hello"].InnerText;
                    dayinfo.Image    = feast["img"].InnerText;
                    dayinfo.SayHello = true;
                }
            }
            //普通日子或没有庆贺语
            if (dayinfo.Info?.Length == 0)
            {
                feast = feastdoc.SelectSingleNode("descendant::NORMAL/day[@time1<'" + d.ToString("HHmm") + "']");
                if (feast != null)
                {
                    dayinfo.Info  = feast["hello"].InnerText;
                    dayinfo.Image = feast["img"].InnerText;
                }
            }

            dayinfo.Fullinfo  = dayinfo.Year + "年" + dayinfo.Month + "月" + dayinfo.Day + "日";
            dayinfo.Fullinfo += dayinfo.DayInWeek;
            dayinfo.Fullinfo += " 农历" + dayinfo.CyearCyl + "[" + dayinfo.Scyear + "]年";
            if (dayinfo.IsLeap)
            {
                dayinfo.Fullinfo += "闰";
            }
            dayinfo.Fullinfo += dayinfo.Scmonth + dayinfo.Scday;
            if (dayinfo.solarterm != "")
            {
                dayinfo.Fullinfo += "  " + dayinfo.solarterm;
            }

            return(dayinfo);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 得到精简日期信息(不含节日)
        /// </summary>
        /// <param name="d">待检查的日子</param>
        /// <returns>日期信息</returns>
        public static StructDateFullInfo GetDateTidyInfo(this DateTime d)
        {
            var        dayinfo = new StructDateFullInfo();
            structDate day     = GetLunar(d);

            dayinfo.IsLeap    = day.isLeap;
            dayinfo.Year      = d.Year;
            dayinfo.Cyear     = day.year;
            dayinfo.Scyear    = animals[(day.year - 4) % 12];
            dayinfo.CyearCyl  = Cyclical(day.yearCyl); //干支年
            dayinfo.Month     = d.Month;
            dayinfo.Cmonth    = day.month;
            dayinfo.Scmonth   = cMonthName[day.month];
            dayinfo.CmonthCyl = Cyclical(day.monthCyl); //干支月
            dayinfo.Day       = d.Day;
            dayinfo.Cday      = day.day;
            dayinfo.Scday     = GetCDay(day.day);     //日子
            dayinfo.CdayCyl   = Cyclical(day.dayCyl); //干支日
            switch (d.DayOfWeek)
            {
            case DayOfWeek.Sunday:
                dayinfo.DayInWeek = "星期日";
                break;

            case DayOfWeek.Monday:
                dayinfo.DayInWeek = "星期一";
                break;

            case DayOfWeek.Tuesday:
                dayinfo.DayInWeek = "星期二";
                break;

            case DayOfWeek.Wednesday:
                dayinfo.DayInWeek = "星期三";
                break;

            case DayOfWeek.Thursday:
                dayinfo.DayInWeek = "星期四";
                break;

            case DayOfWeek.Friday:
                dayinfo.DayInWeek = "星期五";
                break;

            case DayOfWeek.Saturday:
                dayinfo.DayInWeek = "星期六";
                break;

            default:
                dayinfo.DayInWeek = "星期?";
                break;
            }

            dayinfo.Info     = "";
            dayinfo.Feast    = "";
            dayinfo.Image    = "";
            dayinfo.SayHello = false;

            //节气
            //每个月有两个节气
            int d1 = GetSolarTermDay(d.Year, (d.Month * 2) - 1).Day;
            int d2 = GetSolarTermDay(d.Year, d.Month * 2).Day;

            if (dayinfo.Day == d1)
            {
                if (solarTerm.Length > d.Month * 2 - 2)
                {
                    dayinfo.solarterm = solarTerm[d.Month * 2 - 2];
                }
            }
            else if (dayinfo.Day == d2)
            {
                dayinfo.solarterm = solarTerm[d.Month * 2 - 1];
            }
            else
            {
                dayinfo.solarterm = "";
            }

            dayinfo.Fullinfo  = dayinfo.Year + "年" + dayinfo.Month + "月" + dayinfo.Day + "日";
            dayinfo.Fullinfo += " " + dayinfo.DayInWeek;
            dayinfo.Fullinfo += " 农历" + dayinfo.CyearCyl + "(" + dayinfo.Scyear + ")年";
            if (dayinfo.IsLeap)
            {
                dayinfo.Fullinfo += "闰";
            }
            dayinfo.Fullinfo += dayinfo.Scmonth + dayinfo.Scday;
            if (dayinfo.solarterm != "")
            {
                dayinfo.Fullinfo += " " + dayinfo.solarterm;
            }

            return(dayinfo);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 获取农历
        /// </summary>
        public StructDateFullInfo getChinaDate(DateTime dt)
        {
            StructDateFullInfo cd = new StructDateFullInfo();
            int year = dt.Year;
            int month = dt.Month;
            int date = dt.Day;
            long[] l = calElement(year, month, date);
            cd.Cyear = (int)l[0];
            cd.Cmonth = (int)l[1];
            cd.Cday = (int)l[2];
            cd.Scyear = cyclical(year);
            cd.cnAnm = AnimalsYear(year);
            cd.Scmonth = nStr1[(int)l[1]];
            cd.Scday = GetCDay((int)(l[2]));
            string smd = dt.ToString("MMdd");

            string lmd = FormatDate(cd.Cmonth, cd.Cday);
            for (int i = 0; i < solarTerm.Length; i++)
            {
                string s1 = GetSolarTermDay(dt.Year, i).ToString("MMdd");
                if (s1.Equals(dt.ToString("MMdd")))
                {
                    cd.solarterm = solarTerm[i];
                    break;
                }
            }
            foreach (string s in sFtv)
            {
                string s1 = s.Substring(0, 4);
                if (s1.Equals(smd))
                {
                    cd.cnFtvs = s.Substring(4, s.Length - 4);
                    break;
                }
            }
            foreach (string s in lFtv)
            {
                string s1 = s.Substring(0, 4);
                if (s1.Equals(lmd))
                {
                    cd.cnFtvl = s.Substring(4, s.Length - 4);
                    break;
                }
            }
            dt = dt.AddDays(1);
            year = dt.Year;
            month = dt.Month;
            date = dt.Day;
            l = calElement(year, month, date);
            lmd = FormatDate((int)l[1], (int)l[2]);
            if (lmd.Equals("0101")) cd.cnFtvl = "除夕";
            return cd;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 得到日期信息
        /// </summary>
        /// <param name="d">待检查的日子</param>
        /// <returns>日期信息</returns>
        public StructDateFullInfo GetDateInfo(DateTime d)
        {     // xml文件属性-生成操作-嵌入的资源
            string calendarXmlData = ReadFileFromEmbedded("EthanLibrary.Common" + "CCalendarData.xml");

            StructDateFullInfo dayinfo = new StructDateFullInfo();
            structDate day = GetLunar(d);

            dayinfo.IsLeap = day.isLeap;

            dayinfo.Year = d.Year;
            dayinfo.Cyear = day.year;
            dayinfo.Scyear = animals[(day.year - 4) % 12];
            dayinfo.CyearCyl = Cyclical(day.yearCyl);//干支年

            dayinfo.Month = d.Month;
            dayinfo.Cmonth = day.month;
            dayinfo.Scmonth = cMonthName[day.month];
            dayinfo.CmonthCyl = Cyclical(day.monthCyl);//干支月

            dayinfo.Day = d.Day;
            dayinfo.Cday = day.day;
            dayinfo.Scday = GetCDay(day.day);//日子
            dayinfo.CdayCyl = Cyclical(day.dayCyl);//干支日

            switch (d.DayOfWeek)
            {
                case DayOfWeek.Sunday:
                    dayinfo.DayInWeek = "星期日";
                    break;

                case DayOfWeek.Monday:
                    dayinfo.DayInWeek = "星期一";
                    break;

                case DayOfWeek.Tuesday:
                    dayinfo.DayInWeek = "星期二";
                    break;

                case DayOfWeek.Wednesday:
                    dayinfo.DayInWeek = "星期三";
                    break;

                case DayOfWeek.Thursday:
                    dayinfo.DayInWeek = "星期四";
                    break;

                case DayOfWeek.Friday:
                    dayinfo.DayInWeek = "星期五";
                    break;

                case DayOfWeek.Saturday:
                    dayinfo.DayInWeek = "星期六";
                    break;

                default:
                    dayinfo.DayInWeek = "星期?";
                    break;
            }

            //节气
            //每个月有两个节气
            int d1 = GetSolarTermDay(d.Year, d.Month * 2 - 1).Day;
            int d2 = GetSolarTermDay(d.Year, d.Month * 2).Day;
            if (dayinfo.Day == d1)
            {
                dayinfo.solarterm = solarTerm[d.Month * 2 - 2];
            }
            else if (dayinfo.Day == d2)
            {
                dayinfo.solarterm = solarTerm[d.Month * 2 - 1];
            }
            else
            {
                dayinfo.solarterm = "";
            }

            //节日及问候语
            dayinfo.Info = "";
            dayinfo.Feast = "";
            dayinfo.Image = "";
            dayinfo.SayHello = false;
            XmlDocument feastdoc = new XmlDocument();
            feastdoc.LoadXml(calendarXmlData);

            //公历
            XmlNodeList nodeList = feastdoc.SelectNodes("descendant::AD/feast[@day='" + d.ToString("MMdd") + "']");
            foreach (XmlNode root in nodeList)
            {
                dayinfo.Feast += root.Attributes["name"].InnerText + " ";
                if (root.Attributes["sayhello"].InnerText == "yes")
                {//需要显示节日问候语
                    dayinfo.Info = root["hello"].InnerText;
                    //看看是否需要计算周年
                    if (root["startyear"] != null)
                    {
                        int startyear = Convert.ToInt32(root["startyear"].InnerText);
                        dayinfo.Info = dayinfo.Info.Replace("_YEARS_", (d.Year - startyear).ToString());
                    }
                    dayinfo.Image = root["img"].InnerText;
                    dayinfo.SayHello = true;
                }
            }

            //农历
            string smmdd = "";
            smmdd = (dayinfo.Cmonth.ToString().Length == 2) ? dayinfo.Cmonth.ToString() : ("0" + dayinfo.Cmonth.ToString());
            smmdd += (dayinfo.Cday.ToString().Length == 2) ? dayinfo.Cday.ToString() : ("0" + dayinfo.Cday.ToString());
            XmlNode feast = feastdoc.SelectSingleNode("descendant::LUNAR/feast[@day='" + smmdd + "']");
            if (feast != null)
            {
                dayinfo.Feast += feast.Attributes["name"].InnerText;

                if (feast.Attributes["sayhello"].InnerText == "yes")
                {//需要显示节日问候语
                    dayinfo.Info += feast["hello"].InnerText;
                    dayinfo.Image = feast["img"].InnerText;
                    dayinfo.SayHello = true;
                }
            }
            //普通日子或没有庆贺语
            if (dayinfo.Info == "")
            {
                feast = feastdoc.SelectSingleNode("descendant::NORMAL/day[@time1<'" + d.ToString("HHmm") + "']");
                if (feast != null)
                {
                    dayinfo.Info = feast["hello"].InnerText;
                    dayinfo.Image = feast["img"].InnerText;
                }
            }

            dayinfo.Fullinfo = dayinfo.Year.ToString() + "年" + dayinfo.Month.ToString() + "月" + dayinfo.Day.ToString() + "日";
            dayinfo.Fullinfo += dayinfo.DayInWeek;
            dayinfo.Fullinfo += " 农历" + dayinfo.CyearCyl + "[" + dayinfo.Scyear + "]年";
            if (dayinfo.IsLeap)
            {
                dayinfo.Fullinfo += "闰";
            }
            dayinfo.Fullinfo += dayinfo.Scmonth + dayinfo.Scday;
            if (dayinfo.solarterm != "")
            {
                dayinfo.Fullinfo += "  " + dayinfo.solarterm;
            }

            return dayinfo;
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 得到精简日期信息(不含节日)
        /// </summary>
        /// <param name="d">待检查的日子</param>
        /// <returns>日期信息</returns>
        public StructDateFullInfo GetDateTidyInfo(DateTime d)
        {
            StructDateFullInfo dayinfo = new StructDateFullInfo();
            structDate day = GetLunar(d);

            dayinfo.IsLeap = day.isLeap;

            dayinfo.Year = d.Year;
            dayinfo.Cyear = day.year;
            dayinfo.Scyear = animals[(day.year - 4) % 12];
            dayinfo.CyearCyl = Cyclical(day.yearCyl);//干支年

            dayinfo.Month = d.Month;
            dayinfo.Cmonth = day.month;
            dayinfo.Scmonth = cMonthName[day.month];
            dayinfo.CmonthCyl = Cyclical(day.monthCyl);//干支月

            dayinfo.Day = d.Day;
            dayinfo.Cday = day.day;
            dayinfo.Scday = GetCDay(day.day);//日子
            dayinfo.CdayCyl = Cyclical(day.dayCyl);//干支日

            switch (d.DayOfWeek)
            {
                case DayOfWeek.Sunday:
                    dayinfo.DayInWeek = "星期日";
                    break;

                case DayOfWeek.Monday:
                    dayinfo.DayInWeek = "星期一";
                    break;

                case DayOfWeek.Tuesday:
                    dayinfo.DayInWeek = "星期二";
                    break;

                case DayOfWeek.Wednesday:
                    dayinfo.DayInWeek = "星期三";
                    break;

                case DayOfWeek.Thursday:
                    dayinfo.DayInWeek = "星期四";
                    break;

                case DayOfWeek.Friday:
                    dayinfo.DayInWeek = "星期五";
                    break;

                case DayOfWeek.Saturday:
                    dayinfo.DayInWeek = "星期六";
                    break;

                default:
                    dayinfo.DayInWeek = "星期?";
                    break;
            }

            dayinfo.Info = "";
            dayinfo.Feast = "";
            dayinfo.Image = "";
            dayinfo.SayHello = false;

            //节气
            //每个月有两个节气
            int d1 = GetSolarTermDay(d.Year, d.Month * 2 - 1).Day;
            int d2 = GetSolarTermDay(d.Year, d.Month * 2).Day;
            if (dayinfo.Day == d1)
            {
                dayinfo.solarterm = solarTerm[d.Month * 2 - 2];
            }
            else if (dayinfo.Day == d2)
            {
                dayinfo.solarterm = solarTerm[d.Month * 2 - 1];
            }
            else
            {
                dayinfo.solarterm = "";
            }

            dayinfo.Fullinfo = dayinfo.Year.ToString() + "年" + dayinfo.Month.ToString() + "月" + dayinfo.Day.ToString() + "日";
            dayinfo.Fullinfo += " " + dayinfo.DayInWeek;
            dayinfo.Fullinfo += " 农历" + dayinfo.CyearCyl + "(" + dayinfo.Scyear + ")年";
            if (dayinfo.IsLeap)
            {
                dayinfo.Fullinfo += "闰";
            }
            dayinfo.Fullinfo += dayinfo.Scmonth + dayinfo.Scday;
            if (dayinfo.solarterm != "")
            {
                dayinfo.Fullinfo += " " + dayinfo.solarterm;
            }

            return dayinfo;
        }