农历的算法 类 可能有问题 转载 - Go语言中文社区

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


 

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 
=
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/gooluk/article/details/1570377
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-02 21:42:17
  • 阅读 ( 252 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢