/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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; }
/// <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; }