最近郁闷地发现网上现有的相当一部分万年历上干支纪年的算法都是错误的。因为干支纪年是针对阴历而言的,而生肖属相又跟地支对应,所以元旦和春节之间那段时间在干支纪年法中应该归上一年,以阳历2007年2月9日为例,当日的阴历日期是二〇〇六年十二月廿二日,是丙戌年,即狗年,但是浏览一下目前的万年历,相当一部分都显示成了丁亥年,猪年,比较郁闷~~
///
<summary>
///
中国日历信息实体类
///
cncxz(虫虫)2007-2-9
///
</summary>
public
sealed
class
ChineseCalendarInfo
{
private
DateTimem_SolarDate;
private
int
m_LunarYear,m_LunarMonth,m_LunarDay;
private
bool
m_IsLeapMonth
=
false
;
private
string
m_LunarYearSexagenary
=
null
,m_LunarYearAnimal
=
null
;
private
string
m_LunarYearText
=
null
,m_LunarMonthText
=
null
,m_LunarDayText
=
null
;
private
string
m_SolarWeekText
=
null
,m_SolarConstellation
=
null
,m_SolarBirthStone
=
null
;
构造函数
日历属性
///
<summary>
///
根据指定阳历日期计算星座&诞生石
///
</summary>
///
<paramname="date">
指定阳历日期
</param>
///
<paramname="constellation">
星座
</param>
///
<paramname="birthstone">
诞生石
</param>
public
static
void
CalcConstellation(DateTimedate,
out
string
constellation,
out
string
birthstone)
{
int
i
=
Convert.ToInt32(date.ToString(
"
MMdd
"
));
int
j;
if
(i
>=
321
&&
i
<=
419
)
j
=
0
;
else
if
(i
>=
420
&&
i
<=
520
)
j
=
1
;
else
if
(i
>=
521
&&
i
<=
621
)
j
=
2
;
else
if
(i
>=
622
&&
i
<=
722
)
j
=
3
;
else
if
(i
>=
723
&&
i
<=
822
)
j
=
4
;
else
if
(i
>=
823
&&
i
<=
922
)
j
=
5
;
else
if
(i
>=
923
&&
i
<=
1023
)
j
=
6
;
else
if
(i
>=
1024
&&
i
<=
1121
)
j
=
7
;
else
if
(i
>=
1122
&&
i
<=
1221
)
j
=
8
;
else
if
(i
>=
1222
||
i
<=
119
)
j
=
9
;
else
if
(i
>=
120
&&
i
<=
218
)
j
=
10
;
else
if
(i
>=
219
&&
i
<=
320
)
j
=
11
;
else
{
constellation
=
"
未知星座
"
;
birthstone
=
"
未知诞生石
"
;
return
;
}
constellation
=
Constellations[j];
birthstone
=
BirthStones[j];
星座划分
}
阴历转阳历
从阴历创建日历
private
static
ChineseLunisolarCalendarcalendar
=
new
ChineseLunisolarCalendar();
public
const
string
ChineseNumber
=
"
〇一二三四五六七八九
"
;
public
const
string
CelestialStem
=
"
甲乙丙丁戊己庚辛壬癸
"
;
public
const
string
TerrestrialBranch
=
"
子丑寅卯辰巳午未申酉戌亥
"
;
public
const
string
Animals
=
"
鼠牛虎兔龙蛇马羊猴鸡狗猪
"
;
public
static
readonly
string
[]ChineseWeekName
=
new
string
[]
{
"
星期天
"
,
"
星期一
"
,
"
星期二
"
,
"
星期三
"
,
"
星期四
"
,
"
星期五
"
,
"
星期六
"
}
;
public
static
readonly
string
[]ChineseDayName
=
new
string
[]
{
"
初一
"
,
"
初二
"
,
"
初三
"
,
"
初四
"
,
"
初五
"
,
"
初六
"
,
"
初七
"
,
"
初八
"
,
"
初九
"
,
"
初十
"
,
"
十一
"
,
"
十二
"
,
"
十三
"
,
"
十四
"
,
"
十五
"
,
"
十六
"
,
"
十七
"
,
"
十八
"
,
"
十九
"
,
"
二十
"
,
"
廿一
"
,
"
廿二
"
,
"
廿三
"
,
"
廿四
"
,
"
廿五
"
,
"
廿六
"
,
"
廿七
"
,
"
廿八
"
,
"
廿九
"
,
"
三十
"
}
;
public
static
readonly
string
[]ChineseMonthName
=
new
string
[]
{
"
正
"
,
"
二
"
,
"
三
"
,
"
四
"
,
"
五
"
,
"
六
"
,
"
七
"
,
"
八
"
,
"
九
"
,
"
十
"
,
"
十一
"
,
"
十二
"
}
;
public
static
readonly
string
[]Constellations
=
new
string
[]
{
"
白羊座
"
,
"
金牛座
"
,
"
双子座
"
,
"
巨蟹座
"
,
"
狮子座
"
,
"
处女座
"
,
"
天秤座
"
,
"
天蝎座
"
,
"
射手座
"
,
"
摩羯座
"
,
"
水瓶座
"
,
"
双鱼座
"
}
;
public
static
readonly
string
[]BirthStones
=
new
string
[]
{
"
钻石
"
,
"
蓝宝石
"
,
"
玛瑙
"
,
"
珍珠
"
,
"
红宝石
"
,
"
红条纹玛瑙
"
,
"
蓝宝石
"
,
"
猫眼石
"
,
"
黄宝石
"
,
"
土耳其玉
"
,
"
紫水晶
"
,
"
月长石,血石
"
}
;
}
工程文件下载: http://www.cnblogs.com/Files/cncxz/ChineseCalendar.rar





















































































工程文件下载: http://www.cnblogs.com/Files/cncxz/ChineseCalendar.rar