农历的算法 类 可能有问题 转载

 

page load 部分 调用日历控件 同时将农历插入

  protected   void  Calendar1_DayRender(Object source, DayRenderEventArgs e)
    
{

        
// Change the background color of the days in the month
        
// to yellow.
        if (!e.Day.IsOtherMonth)//&& !e.Day.IsWeekend)
        {
            
// e.Cell.BackColor = System.Drawing.Color.Yellow;
            e.Cell.ForeColor = System.Drawing.Color.OrangeRed;
        }

        e.Cell.Font.Size 
= 12;


        
// Add custom text to cell in the Calendar control.
        
// if (e.Day.Date.Day == 18)
        
//   e.Cell.Controls.Add(new LiteralControl("<br>Holiday"));
        string ye = e.Day.Date.Year.ToString();
        
string mo = e.Day.Date.Month.ToString();
        
string da = e.Day.Date.Day.ToString();
        e.Cell.Controls.Add(
new LiteralControl("<br>" + lu.GetLunarCalendar(ye, mo, da) + ""));

        
// HtmlAnchor ll = new HtmlAnchor();
        
// ll.HRef = "1.aspx";
        
// e.Cell.Controls.Add(ll);


    }




    
protected   void  Calendar1_SelectionChanged( object  sender, EventArgs e)
    
{
        
if (Calendar1.SelectedDate.Date > DateTime.Now.Date && Calendar1.SelectedDate.Date < DateTime.Now.AddMonths(2).Date)
        
{
            
string DateT = Calendar1.SelectedDate.Date.ToShortDateString();
            
string DateW = Calendar1.SelectWeekText.ToString();
            Response.Redirect(
"Selected.aspx?dateT=" + DateT + "");

        }

    }

 

农历算法所调用的累

public   class  LU
{
    
public LU()
    
{
        
//
        
// TODO: 在此处添加构造函数逻辑
        
//
    }

    
//天干
    private static string[] TianGan =   """""""""""""""""""" };

    
//地支
    private static string[] DiZhi =     """""""""""""""""""""""" };

    
//十二生肖
    private static string[] ShengXiao = """""""""""""""""""""""" };

    
//农历日期
    private static string[] DayName =   {"*","初一","初二","初三","初四","初五",
                                          
"初六","初七","初八","初九","初十",
                                          
"十一","十二","十三","十四","十五",
                                          
"十六","十七","十八","十九","二十",
                                          
"廿一","廿二","廿三","廿四","廿五",       
                                          
"廿六","廿七","廿八","廿九","三十"}
;

    
//农历月份
    private static string[] MonthName =  "*""""""""""""""""""""""十一""" };

    
//公历月计数天
    private static int[] MonthAdd =0315990120151181212243273304334 };

    
//农历数据
    private static int[] LunarData ={2635,333387,1701,1748,267701,694,2391,133423,1175,396438
                                      ,
3402,3749,331177,1453,694,201326,2350,465197,3221,3402
                                      ,
400202,2901,1386,267611,605,2349,137515,2709,464533,1738
                                      ,
2901,330421,1242,2651,199255,1323,529706,3733,1706,398762
                                      ,
2741,1206,267438,2647,1318,204070,3477,461653,1386,2413
                                      ,
330077,1197,2637,268877,3365,531109,2900,2922,398042,2395
                                      ,
1179,267415,2635,661067,1701,1748,398772,2742,2391,330031
                                      ,
1175,1611,200010,3749,527717,1452,2742,332397,2350,3222
                                      ,
268949,3402,3493,133973,1386,464219,605,2349,334123,2709
                                      ,
2890,267946,2773,592565,1210,2651,395863,1323,2707,265877}
;

    
public string GetLunarCalendar(string sYear, string sMonth, string sDay)
    
{
        
int year;
        
int month;
        
int day;

        
try
        
{
            year 
= int.Parse(sYear);
            month 
= int.Parse(sMonth);
            day 
= int.Parse(sDay);
        }

        
catch //(Exception ee)
        {
            year 
= DateTime.Now.Year;
            month 
= DateTime.Now.Month;
            day 
= DateTime.Now.Day;
        }



        
int nTheDate;
        
int nIsEnd;
        
int k, m, n, nBit, i;

        
string calendar = string.Empty;

        
//计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)
        nTheDate = (year - 1921* 365 + (year - 1921/ 4 + day + MonthAdd[month - 1- 38;
        
if ((year % 4 == 0&& (month > 2))
            nTheDate 
+= 1;

        
//计算天干,地支,月,日
        nIsEnd = 0;
        m 
= 0;
        k 
= 0;
        n 
= 0;
        
while (nIsEnd != 1)
        
{
            
if (LunarData[m] < 4095)
                k 
= 11;
            
else
                k 
= 12;
            n 
= k;
            
while (n >= 0)
            
{
                
//获取LunarData[m]的第n个二进制位的值
                nBit = LunarData[m];
                
for (i = 1; i < n + 1; i++)
                    nBit 
= nBit / 2;
                nBit 
= nBit % 2;

                
if (nTheDate <= (29 + nBit))
                
{
                    nIsEnd 
= 1;
                    
break;
                }


                nTheDate 
= nTheDate - 29 - nBit;
                n 
= n - 1;
            }

            
if (nIsEnd == 1)
                
break;
            m 
= m + 1;
        }


        year 
= 1921 + m;
        month 
= k - n + 1;
        day 
= nTheDate;
        
if (k == 12)
        
{
            
if (month == LunarData[m] / 65536 + 1)
                month 
= 1 - month;
            
else if (month > LunarData[m] / 65536 + 1)
                month 
= month - 1;
        }


        
//生肖
        
//calendar = ShengXiao[(year - 4) % 60 % 12].ToString() + "年 ";
        
//            //天干
        
//         calendar += TianGan[(year-4)%60%10].ToString();
        
//            //地支
        
//           calendar += DiZhi[(year-4)%60%12].ToString() + " ";

        
//农历月
        if (month < 1)
            calendar 
+= "" + MonthName[-1 * month].ToString() + "";
        
else
            calendar 
+= MonthName[month].ToString() + "";

        
//农历日
        calendar += DayName[day].ToString() + "";

        
return calendar;
    }


    
public string GetYear(string sYear, string sMonth, string sDay)
    
{
        
int year;
        
int month;
        
int day;

        
try
        
{
            year 
= int.Parse(sYear);
            month 
= int.Parse(sMonth);
            day 
= int.Parse(sDay);
        }

        
catch //(Exception ee)
        {
            year 
= DateTime.Now.Year;
            month 
= DateTime.Now.Month;
            day 
= DateTime.Now.Day;
        }



        
int nTheDate;
        
int nIsEnd;
        
int k, m, n, nBit, i;

        
string calendar = string.Empty;

        
//计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)
        nTheDate = (year - 1921* 365 + (year - 1921/ 4 + day + MonthAdd[month - 1- 38;
        
if ((year % 4 == 0&& (month > 2))
            nTheDate 
+= 1;

        
//计算天干,地支,月,日
        nIsEnd = 0;
        m 
= 0;
        k 
= 0;
        n 
= 0;
        
while (nIsEnd != 1)
        
{
            
if (LunarData[m] < 4095)
                k 
= 11;
            
else
                k 
= 12;
            n 
= k;
            
while (n >= 0)
            
{
                
//获取LunarData[m]的第n个二进制位的值
                nBit = LunarData[m];
                
for (i = 1; i < n + 1; i++)
                    nBit 
= nBit / 2;
                nBit 
= nBit % 2;

                
if (nTheDate <= (29 + nBit))
                
{
                    nIsEnd 
= 1;
                    
break;
                }


                nTheDate 
= nTheDate - 29 - nBit;
                n 
= n - 1;
            }

            
if (nIsEnd == 1)
                
break;
            m 
= m + 1;
        }


        year 
= 1921 + m;
        month 
= k - n + 1;
        day 
= nTheDate;
        
if (k == 12)
        
{
            
if (month == LunarData[m] / 65536 + 1)
                month 
= 1 - month;
            
else if (month > LunarData[m] / 65536 + 1)
                month 
= month - 1;
        }


        
//生肖
        calendar = ShengXiao[(year - 4% 60 % 12].ToString() + "年 ";
        
//            //天干
                 calendar += TianGan[(year-4)%60%10].ToString();
        
//            //地支
                   calendar += DiZhi[(year-4)%60%12].ToString() + " ";

        
//农历月
        if (month < 1)
            calendar 
+= "" + MonthName[-1 * month].ToString() + "";
        
else
            calendar 
+= MonthName[month].ToString() + "";

        
//农历日
        calendar += DayName[day].ToString() + "";

        
return calendar;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值