您的位置:首页 > 编程语言 > C#

C# 公农历算法 ChineseLunisolarCalendar的一点思路

2010-08-04 15:40 495 查看
代码

1 public partial class CalendarFive : System.Web.UI.Page
2 {
3 /// <summary>
4 /// 公历节
5 /// </summary>
6 string[,] holidays = new String[14, 32];
7 /// <summary>
8 /// 农历节
9 /// </summary>
10 string[,] Chinaholidays = new String[14, 32];
11 /// <summary>
12 /// 好日子
13 /// </summary>
14 string[,] GoodDays = new String[14, 32];
15 /// <summary>
16 /// 周期性节日
17 /// </summary>
18 string[, ,] Weekholidays = new string[14, 32, 32];
19 /// <summary>
20 /// 中国历
21 /// </summary>
22 private static ChineseLunisolarCalendar ChinaCalendar = new ChineseLunisolarCalendar();
23
24 protected void Page_Load(object sender, EventArgs e)
25 {
26 //string aHoliday;
27 string aChinaHoliday = null;
28
29 HtmlHead head = (HtmlHead)Page.Header;
30 //this.Calendar1.ToolTip = "缔友计算机信息技术有限有公司日历";
31 this.Label1.Text = "您当前没有选取任何日期...";
32 Page.Header.Title = "缔友计算机信息技术有限有公司日历";
33 HtmlMeta meta = new HtmlMeta();
34 meta.Name = "Author";
35 meta.Attributes.Add("Content ", "geovindu,软件开发,个性化服务");
36 head.Controls.AddAt(1, meta);
37
38 HtmlMeta key = new HtmlMeta();
39 key.Name = "keywords";
40 key.Attributes.Add("Content ", "Geovin Du,涂聚文,捷为工作室,江西省吉安市永丰县市政花园");
41 head.Controls.AddAt(2, key);
42
43 HtmlLink ico = new HtmlLink();
44 ico.Href = "~/favicon.ico";
45 ico.Attributes.Add("rel", "icon");
46 ico.Attributes.Add("type", "image/ico");
47 head.Controls.AddAt(3, ico);
48
49
50 HtmlLink bookmark = new HtmlLink();
51 bookmark.Href = "~/favicon.ico";
52 bookmark.Attributes.Add("rel", "bookmark");
53 //bookmark.Attributes.Add("type", "image/ico");
54 head.Controls.AddAt(4, bookmark);
55
56 HtmlLink shortcut = new HtmlLink();
57 shortcut.Href = "~/favicon.ico";
58 shortcut.Attributes.Add("rel", "shortcut icon");
59 shortcut.Attributes.Add("type", "image/x-icon");
60 head.Controls.AddAt(5, shortcut);
61
62 HtmlMeta description = new HtmlMeta();
63 description.Name = "description";
64 description.Attributes.Add("Content ", "涂聚文,缔友计算机信息技术有限公司,经营信息流,物流,人力资源流,资本流的系统解决方案的开发与设计和服务");
65 head.Controls.AddAt(6, description);
66
67 //国际节
68 holidays[1, 1] = "元旦";
69 holidays[2, 14] = "情人节";
70 holidays[3, 8] = "妇女节";
71 holidays[3, 15] = "消费者权益日";
72 holidays[4, 1] = "愚人节";
73 holidays[5, 1] = "劳动节";
74 holidays[5, 4] = "青年节";
75 holidays[6, 1] = "儿童节";
76 holidays[7, 1] = "党的生日";
77 holidays[8, 1] = "建军节";
78 holidays[9, 10] = "教师节";
79 holidays[10, 1] = "国庆节";
80 holidays[12, 24] = "平安夜";
81 holidays[12, 25] = "圣诞节";
82
83 //中国节
84 Chinaholidays[1, 1] = "春节";
85 Chinaholidays[1, 15] = "元宵节";
86 // Chinaholidays[2, 21] = "清明节"; 是节气,是一定的规律,但不是规定那一个农历日期
87 Chinaholidays[5, 5] = "端午节";
88
89 Chinaholidays[7, 7] = "七夕";
90 Chinaholidays[7, 15] = "鬼节";
91 Chinaholidays[8, 15] = "中秋节";
92 Chinaholidays[9, 9] = "重阳";
93 Chinaholidays[12, 8] = "腊八节";
94 Chinaholidays[12, 23] = "小年";
95 Chinaholidays[2, 14] = "涂聚文生日";
96 // Chinaholidays[12, 30] = "除夕"; 是一年的最后一天
97 //周期节日
98 Weekholidays[5, 2, 1] = "母亲节";
99 Weekholidays[5, 3, 1] = "全国助残日";
Weekholidays[6, 3, 1] = "父亲节";
Weekholidays[9, 3, 3] = "国际和平日";
Weekholidays[9, 4, 1] = "国际聋人节";
Weekholidays[10, 1, 2] = "国际住房日";
Weekholidays[10, 1, 4] = "国际减轻自然灾害日";
Weekholidays[11, 4, 5] = "感恩节";

//得到闰月月份
int isLeap = 0;
DateTime theday = DateTime.Today;
DateTime days = DateTime.Parse("2017-07-7");
DateTime days1 = DateTime.Parse("2013-2-7");
DateTime days2 = DateTime.Parse("2017-09-7");
DateTime days3 = DateTime.Parse("2016-09-15");
//2009-10-03 //2010-09-22 //2011-09-12 //2012-09-30 //2013-09-19 //2014-09-08 //2015-09-27 //2016-09-15 //2017-10-04
//2009-01-26 //2010-02-13 //2011-02-02 //2013-02-09 //2012-01-22 //2017-01-26
this.Label1.Text = ChineseCalendarHelper.GetStemBranch(DateTime.Now) + "年" + ChineseCalendarHelper.GetMonth(DateTime.Now) + "月" + ChineseCalendarHelper.GetDay(DateTime.Now) + " 生肖:" + ChineseCalendarHelper.GetSX(DateTime.Now);
this.Label2.Text = "今天农历日期:" + ChinaCalendar.GetYear(theday).ToString() + ChinaCalendar.GetMonth(theday).ToString() + ChinaCalendar.GetDayOfMonth(theday).ToString();
this.Label3.Text = days.ToString() + "农历日期:" + ChinaCalendar.GetYear(days).ToString() + ChinaCalendar.GetMonth(days).ToString() + ChinaCalendar.GetDayOfMonth(days).ToString();
this.Label4.Text = ChinaCalendar.GetLeapMonth(days.Year).ToString() + ChinaCalendar.GetMonthsInYear(days.Year).ToString() + ChinaCalendar.IsLeapMonth(days.Year, days.Month).ToString() + ChinaCalendar.IsLeapDay(days.Year, days.Month, days.Day).ToString();

if (ChinaCalendar.IsLeapMonth(days.Year, days.Month) == true)
{
isLeap = ChinaCalendar.GetMonth(days);
}
if ((ChinaCalendar.GetMonth(days1) -1)==isLeap && isLeap!=0)
{
this.Label5.Text =days1.ToString()+ "农历闰月日期:" + ChinaCalendar.GetYear(days1).ToString() + (ChinaCalendar.GetMonth(days1) - 1).ToString() + ChinaCalendar.GetDayOfMonth(days1).ToString();
}
else
{
this.Label5.Text = days1.ToString() + "农历日期:" + ChinaCalendar.GetYear(days1).ToString() + ChinaCalendar.GetMonth(days1).ToString() + ChinaCalendar.GetDayOfMonth(days1).ToString();
}
//this.Label5.Text = "2012-06-7农历日期:" + ChinaCalendar.GetYear(days1).ToString() + ChinaCalendar.GetMonth(days1).ToString() + ChinaCalendar.GetDayOfMonth(days1).ToString();
this.Label6.Text =ChinaCalendar.IsLeapYear(days1.Year).ToString()+ ChinaCalendar.GetLeapMonth(days1.Year).ToString() + ChinaCalendar.GetMonthsInYear(days1.Year).ToString() + ChinaCalendar.IsLeapMonth(days1.Year, days1.Month).ToString() + ChinaCalendar.IsLeapDay(days1.Year, days1.Month, days1.Day).ToString();
if (ChinaCalendar.GetMonth(days2) > isLeap && isLeap != 0)
{
this.Label7.Text = days2.ToString() + "农历日期:" + ChinaCalendar.GetYear(days2).ToString() + (ChinaCalendar.GetMonth(days2) - 1).ToString() + ChinaCalendar.GetDayOfMonth(days2).ToString();
}
else
{
this.Label7.Text = days2.ToString() + "农历日期:" + ChinaCalendar.GetYear(days2).ToString() + ChinaCalendar.GetMonth(days2).ToString() + ChinaCalendar.GetDayOfMonth(days2).ToString();
}
this.Label8.Text = isLeap.ToString();
this.Label9.Text =days1.ToString()+"共多少天:"+ ChinaCalendar.GetDaysInMonth(days1.Year, days1.Month).ToString();
int d=0;
int y = ChinaCalendar.GetYear(days3);
int m = ChinaCalendar.GetMonth(days3);
int s = ChinaCalendar.GetDayOfMonth(days3);
#region 闰年判断
if (ChinaCalendar.IsLeapYear(y, ChineseLunisolarCalendar.CurrentEra) == true)
{
d = ChinaCalendar.GetDaysInMonth(y, m, ChineseLunisolarCalendar.CurrentEra);
this.Label11.Text = "true";
if (m == 13 && d == ChinaCalendar.GetDayOfMonth(days3))
{
this.Label10.Text = days3.ToString() + "闰年农历日期除夕:" + ChinaCalendar.GetYear(days3).ToString() + (ChinaCalendar.GetMonth(days3) - 1).ToString() + ChinaCalendar.GetDayOfMonth(days3).ToString();
}
//闰月
if (ChinaCalendar.IsLeapMonth(y, m) == true)
{
isLeap = m;
}
//当时闰月之上的农历月份要减一来算节日
if (m > isLeap && isLeap != 0)
{
aChinaHoliday = Chinaholidays[m-1 , s];

//显示中国节日
if (aChinaHoliday != null)
{
//Label aLabel = new Label();
//aLabel.Font.Size = 10;
//aLabel.ForeColor = System.Drawing.Color.Red;
//aLabel.Text = "<br>[" + aChinaHoliday + "]";
//e.Cell.Controls.Add(aLabel);
this.Label12.Text = aChinaHoliday;
}
}
else
{
aChinaHoliday = Chinaholidays[m, s];
//显示中国节日
if (aChinaHoliday != null)
{
//Label aLabel = new Label();
//aLabel.Font.Size = 10;
//aLabel.ForeColor = System.Drawing.Color.Red;
//aLabel.Text = "<br>[" + aChinaHoliday + "]";
//e.Cell.Controls.Add(aLabel);
this.Label12.Text = aChinaHoliday;
}
}
}
else
{
d = ChinaCalendar.GetDaysInMonth(y, m, ChineseLunisolarCalendar.CurrentEra);
if (d ==s && m == 12)
{
this.Label10.Text = days3.ToString() + "农历日期除夕:" + ChinaCalendar.GetYear(days3).ToString() + (ChinaCalendar.GetMonth(days3) ).ToString() + ChinaCalendar.GetDayOfMonth(days3).ToString();
}
aChinaHoliday = Chinaholidays[m, s];
//显示中国节日
if (aChinaHoliday != null)
{
//Label aLabel = new Label();
//aLabel.Font.Size = 10;
//aLabel.ForeColor = System.Drawing.Color.Red;
//aLabel.Text = "<br>[" + aChinaHoliday + "]";
//e.Cell.Controls.Add(aLabel);
this.Label12.Text = aChinaHoliday;
}
}
#endregion

if (ChinaCalendar.IsLeapMonth(days3.Year, days3.Month, ChineseLunisolarCalendar.CurrentEra) == true)
{
isLeap = ChinaCalendar.GetMonth(days3);
}
if ((ChinaCalendar.GetMonth(days3) - 1) == isLeap && isLeap != 0)
{
this.Label10.Text = days3.ToString() + "农历闰月日期:" + ChinaCalendar.GetYear(days3).ToString() + (ChinaCalendar.GetMonth(days3) - 1).ToString() + ChinaCalendar.GetDayOfMonth(days3).ToString();
}
else
{
if (ChinaCalendar.GetMonth(days2) == 12 && ChinaCalendar.GetDayOfMonth(days3)==30)
{
d = ChinaCalendar.GetDaysInMonth(days3.Year-1, days3.Month);
}

if (d == ChinaCalendar.GetDayOfMonth(days3))
{
// this.Label10.Text = days3.ToString() + "农历日期" + ChinaCalendar.GetYear(days3).ToString() + ChinaCalendar.GetMonth(days3).ToString() + ChinaCalendar.GetDayOfMonth(days3).ToString();
}
else
{
this.Label10.Text = days3.ToString() + "农历日期" + ChinaCalendar.GetYear(days3).ToString() + ChinaCalendar.GetMonth(days3).ToString() + ChinaCalendar.GetDayOfMonth(days3).ToString()+"total:"+d.ToString();
}
}
}
}

Demo: http://www.dusystem.com/Calendar.aspx

這是用Winform 做的萬年曆,可以編輯各種節日。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: