星期一, 6月 02, 2008

asp.net處理"農曆"

最近有處理到農曆這一方面的問題..google找了一下..發現微軟其實就有一組class可以處理這方面的問題..就研究一下微軟的class還有網路的文章..改了一下寫下自己的class..

public class chinaDate
{
DateTime dt;
public chinaDate(DateTime dt)
{
//dt = new DateTime(2006, 1, 29);//農曆2006年大年初一(測試用)
this.dt = dt;
}
public string cDate()
{
ChineseLunisolarCalendar l = new ChineseLunisolarCalendar();

string sYear = "", sYearArab = "", sMonth = "", sDay = "", sDay10 = "",
sDay1 = "", sLuniSolarDate = "", sBirthpet = "";

int iYear, iMonth, iDay;
iYear = l.GetYear(dt);
iMonth = l.GetMonth(dt);
iDay = l.GetDayOfMonth(dt);

//Format Year
sYearArab = iYear.ToString();
for (int i = 0; i < sYearArab.Length; i++)
{
sYear += (aDigi)int.Parse(sYearArab.Substring(i, 1));
}

//Format Month
int iLeapMonth = l.GetLeapMonth(iYear);//獲取閏月

/* 閏月可以出現在一年的任何月份之後。
* 例如,GetMonth 方法返回一個介於 1 到 13 之間的數字來表示與指定日期關聯的月份。
* 如果在一年的八月和九月之間有一個閏月,則 GetMonth 方法為八月返回 8,為閏八月返回 9,為九月返回 10。
*/
if (iLeapMonth > 0 && iMonth <= iLeapMonth)
{
string mMonth = "閏" + (aMonth)(iLeapMonth - 1);
if (iMonth == iLeapMonth)
sMonth = mMonth;
else
sMonth = ((aMonth)iMonth).ToString();
}
else if (iLeapMonth > 0 && iMonth > iLeapMonth)
sMonth = ((aMonth)(iMonth - 1)).ToString();
else
sMonth = ((aMonth)(iMonth)).ToString();


//Format Day
sDay10 = ((a10)(iDay / 10)).ToString();
sDay1 = ((aDigi)(iDay % 10)).ToString();
sDay = sDay10 + sDay1;

if (iDay == 10) sDay = "初十";
if (iDay == 20) sDay = "二十";
if (iDay == 30) sDay = "三十";

//生肖
int iBirthYear = l.GetSexagenaryYear(dt);
int iBirthpet = l.GetTerrestrialBranch(iBirthYear);
sBirthpet = ((birthpet)iBirthpet).ToString();

//Format Lunar Date
sLuniSolarDate = string.Format("農曆:{0}年 {1}{2} {3}", sYear, sMonth, sDay, sBirthpet);
return sLuniSolarDate;
}
}
public enum birthpet
{
鼠 = 1, 牛, 虎, 兔, 龍, 蛇, 馬, 羊, 猴, 雞, 狗, 豬
}
public enum aMonth
{
正月 = 1, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 臘月, 臘月月
}
public enum a10
{
初, 十, 廿, 卅
}
public enum aDigi
{
O, 一, 二, 三, 四, 五, 六, 七, 八, 九
}

上面這組是參考 sun.Lei 大大修改來的..有需要就拿去用ㄅ..

參考:
http://msdn.microsoft.com/zh-tw/library/system.globalization.chineselunisolarcalendar.aspx
http://www.cnblogs.com/hcl0208/archive/2006/10/21/535576.html
http://blog.csdn.net/zhoufoxcn/archive/2007/11/21/1896258.aspx

1 則留言:

mesley Shih 提到...

大大 有vb的寫法嗎?