一、代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
namespace PowerCalendar
{
/// <summary>
/// 万年历
/// </summary>
public partial class Form1 : Form
{
const string CelestlalStem = "甲乙丙丁戊己庚辛壬癸";
const string TerrestrialBranch = "子丑寅卯辰已午未申酉戌亥";
const string TeeYear = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
string[] ChinesDayNames;
string[] ChinesMonthNames = new string[12] { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊" };
const string ChineseFormat = "{0}{1}年{2}月{3} {4}年";
ChineseLunisolarCalendar calendar = new ChineseLunisolarCalendar();
public Form1()
{
InitializeComponent();
ChinesDayNames = new string[31]{"初一", "初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四",
"十五","十六","十七","十八","十九","廿十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","卅十","卅一"};
}
private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
this.toolTip1.Show(GetStemBranch(monthCalendar1.SelectionStart), this.monthCalendar1, this.monthCalendar1.Location, 5000);
this.label1.Text = GetStemBranch(monthCalendar1.SelectionStart);
}
/// <summary>
/// 显示今天日期
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
label1.Text=GetStemBranch(this.monthCalendar1.TodayDate);
label1.BackColor=Color.Wheat;
}
/// <summary>
/// 返回阴历日期
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public string GetStemBranch(DateTime date)
{
int year = calendar.GetSexagenaryYear(date);
int celestial = calendar.GetCelestialStem(year);
int branch = calendar.GetTerrestrialBranch(year);
return string.Format(ChineseFormat, CelestlalStem[celestial - 1], TerrestrialBranch[branch - 1], GetMonth(date), GetDayDate(date), GetYear(date));
}
/// <summary>
/// 返回阴历月份
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public string GetMonth(DateTime date)
{
int month = calendar.GetMonth(date);
bool isLeap = false;
if (calendar.IsLeapMonth(calendar.GetYear(date), calendar.GetMonth(date)))//闰月的话月份减一
{
month--;
isLeap = true;
}
return (isLeap?"闰":"")+ChinesMonthNames[month - 1];
}
/// <summary>
/// 返回阴历天的记法
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
public string GetDayDate(DateTime time)
{
int day = calendar.GetDayOfMonth(time);
return ChinesDayNames[day - 1];
}
/// <summary>
/// 返回阴历年的记法
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public string GetYear(DateTime date)
{
int year = calendar.GetSexagenaryYear(date);//60甲子年
int branch = calendar.GetTerrestrialBranch(year);//地支
return TeeYear[branch-1].ToString();
}
}
}
二、效果: