<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對(duì)文章有任何疑問(wèn)或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂(lè)園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

     

    陽(yáng)歷轉(zhuǎn)陰歷

    import  java.text.ParseException;
    import  java.text.SimpleDateFormat;
    import  java.util.Calendar;
    import  java.util.Date;

    public   class  Lunar  {
        
    private   int  year;
        
    private   int  month;
        
    private   int  day;
        
    private   boolean  leap;
        
    final   static  String chineseNumber[]  =   { " " " " " " " " " " " " " " " " " " " " " 十一 " " 十二 " } ;
        
    static  SimpleDateFormat chineseDateFormat  =   new  SimpleDateFormat( " yyyy年MM月dd日 " );
        
    final   static   long [] lunarInfo  =   new   long []
        
    { 0x04bd8 0x04ae0 0x0a570 0x054d5 0x0d260 0x0d950 0x16554 0x056a0 0x09ad0 0x055d2 ,
         
    0x04ae0 0x0a5b6 0x0a4d0 0x0d250 0x1d255 0x0b540 0x0d6a0 0x0ada2 0x095b0 0x14977 ,
         
    0x04970 0x0a4b0 0x0b4b5 0x06a50 0x06d40 0x1ab54 0x02b60 0x09570 0x052f2 0x04970 ,
         
    0x06566 0x0d4a0 0x0ea50 0x06e95 0x05ad0 0x02b60 0x186e3 0x092e0 0x1c8d7 0x0c950 ,
         
    0x0d4a0 0x1d8a6 0x0b550 0x056a0 0x1a5b4 0x025d0 0x092d0 0x0d2b2 0x0a950 0x0b557 ,
         
    0x06ca0 0x0b550 0x15355 0x04da0 0x0a5d0 0x14573 0x052d0 0x0a9a8 0x0e950 0x06aa0 ,
         
    0x0aea6 0x0ab50 0x04b60 0x0aae4 0x0a570 0x05260 0x0f263 0x0d950 0x05b57 0x056a0 ,
         
    0x096d0 0x04dd5 0x04ad0 0x0a4d0 0x0d4d4 0x0d250 0x0d558 0x0b540 0x0b5a0 0x195a6 ,
         
    0x095b0 0x049b0 0x0a974 0x0a4b0 0x0b27a 0x06a50 0x06d40 0x0af46 0x0ab60 0x09570 ,
         
    0x04af5 0x04970 0x064b0 0x074a3 0x0ea50 0x06b58 0x055c0 0x0ab60 0x096d5 0x092e0 ,
         
    0x0c960 0x0d954 0x0d4a0 0x0da50 0x07552 0x056a0 0x0abb7 0x025d0 0x092d0 0x0cab5 ,
         
    0x0a950 0x0b4a0 0x0baa4 0x0ad50 0x055d9 0x04ba0 0x0a5b0 0x15176 0x052b0 0x0a930 ,
         
    0x07954 0x06aa0 0x0ad50 0x05b52 0x04b60 0x0a6e6 0x0a4e0 0x0d260 0x0ea65 0x0d530 ,
         
    0x05aa0 0x076a3 0x096d0 0x04bd7 0x04ad0 0x0a4d0 0x1d0b6 0x0d250 0x0d520 0x0dd45 ,
         
    0x0b5a0 0x056d0 0x055b2 0x049b0 0x0a577 0x0a4b0 0x0aa50 0x1b255 0x06d20 0x0ada0 }
    ;

        
    // ====== 傳回農(nóng)歷 y年的總天數(shù)
         final   private   static   int  yearDays( int  y)  {
            
    int  i, sum  =   348 ;
            
    for  (i  =   0x8000 ; i  >   0x8 ; i  >>=   1 {
                
    if  ((lunarInfo[y  -   1900 &  i)  !=   0 ) sum  +=   1 ;
            }

            
    return  (sum  +  leapDays(y));
        }


        
    // ====== 傳回農(nóng)歷 y年閏月的天數(shù)
         final   private   static   int  leapDays( int  y)  {
            
    if  (leapMonth(y)  !=   0 {
                
    if  ((lunarInfo[y  -   1900 &   0x10000 !=   0 )
                    
    return   30 ;
                
    else
                    
    return   29 ;
            }
      else
                
    return   0 ;
        }


        
    // ====== 傳回農(nóng)歷 y年閏哪個(gè)月 1-12 , 沒(méi)閏傳回 0
         final   private   static   int  leapMonth( int  y)  {
            
    return  ( int ) (lunarInfo[y  -   1900 &   0xf );
        }


        
    // ====== 傳回農(nóng)歷 y年m月的總天數(shù)
         final   private   static   int  monthDays( int  y,  int  m)  {
            
    if  ((lunarInfo[y  -   1900 &  ( 0x10000   >>  m))  ==   0 )
                
    return   29 ;
            
    else
                
    return   30 ;
        }


        
    // ====== 傳回農(nóng)歷 y年的生肖
         final   public  String animalsYear()  {
            
    final  String[] Animals  =   new  String[] { " " " " " " " " " " " " " " " " " " " " " " " " } ;
            
    return  Animals[(year  -   4 %   12 ];
        }


        
    // ====== 傳入 月日的offset 傳回干支, 0=甲子
         final   private   static  String cyclicalm( int  num)  {
            
    final  String[] Gan  =   new  String[] { " " " " " " " " " " " " " " " " " " " " } ;
            
    final  String[] Zhi  =   new  String[] { " " " " " " " " " " " " " " " " " " " " " " " " } ;
            
    return  (Gan[num  %   10 +  Zhi[num  %   12 ]);
        }


        
    // ====== 傳入 offset 傳回干支, 0=甲子
         final   public  String cyclical()  {
            
    int  num  =  year  -   1900   +   36 ;
            
    return  (cyclicalm(num));
        }


        
    /**
         * 傳出y年m月d日對(duì)應(yīng)的農(nóng)歷.
         * yearCyl3:農(nóng)歷年與1864的相差數(shù)              ?
         * monCyl4:從1900年1月31日以來(lái),閏月數(shù)
         * dayCyl5:與1900年1月31日相差的天數(shù),再加40      ?
         * 
    @param  cal 
         * 
    @return  
         
    */

        
    public  Lunar(Calendar cal)  {
            @SuppressWarnings(
    " unused " int  yearCyl, monCyl, dayCyl;
            
    int  leapMonth  =   0 ;
            Date baseDate 
    =   null ;
            
    try   {
                baseDate 
    =  chineseDateFormat.parse( " 1900年1月31日 " );
            }
      catch  (ParseException e)  {
                e.printStackTrace();  
    // To change body of catch statement use Options | File Templates.
            }


            
    // 求出和1900年1月31日相差的天數(shù)
             int  offset  =  ( int ) ((cal.getTime().getTime()  -  baseDate.getTime())  /   86400000L );
            dayCyl 
    =  offset  +   40 ;
            monCyl 
    =   14 ;

            
    // 用offset減去每農(nóng)歷年的天數(shù)
            
    //  計(jì)算當(dāng)天是農(nóng)歷第幾天
            
    // i最終結(jié)果是農(nóng)歷的年份
            
    // offset是當(dāng)年的第幾天
             int  iYear, daysOfYear  =   0 ;
            
    for  (iYear  =   1900 ; iYear  <   2050   &&  offset  >   0 ; iYear ++ {
                daysOfYear 
    =  yearDays(iYear);
                offset 
    -=  daysOfYear;
                monCyl 
    +=   12 ;
            }

            
    if  (offset  <   0 {
                offset 
    +=  daysOfYear;
                iYear
    -- ;
                monCyl 
    -=   12 ;
            }

            
    // 農(nóng)歷年份
            year  =  iYear;

            yearCyl 
    =  iYear  -   1864 ;
            leapMonth 
    =  leapMonth(iYear);  // 閏哪個(gè)月,1-12
            leap  =   false ;

            
    // 用當(dāng)年的天數(shù)offset,逐個(gè)減去每月(農(nóng)歷)的天數(shù),求出當(dāng)天是本月的第幾天
             int  iMonth, daysOfMonth  =   0 ;
            
    for  (iMonth  =   1 ; iMonth  <   13   &&  offset  >   0 ; iMonth ++ {
                
    // 閏月
                 if  (leapMonth  >   0   &&  iMonth  ==  (leapMonth  +   1 &&   ! leap)  {
                    
    -- iMonth;
                    leap 
    =   true ;
                    daysOfMonth 
    =  leapDays(year);
                }
      else
                    daysOfMonth 
    =  monthDays(year, iMonth);

                offset 
    -=  daysOfMonth;
                
    // 解除閏月
                 if  (leap  &&  iMonth  ==  (leapMonth  +   1 )) leap  =   false ;
                
    if  ( ! leap) monCyl ++ ;
            }

            
    // offset為0時(shí),并且剛才計(jì)算的月份是閏月,要校正
             if  (offset  ==   0   &&  leapMonth  >   0   &&  iMonth  ==  leapMonth  +   1 {
                
    if  (leap)  {
                    leap 
    =   false ;
                }
      else   {
                    leap 
    =   true ;
                    
    -- iMonth;
                    
    -- monCyl;
                }

            }

            
    // offset小于0時(shí),也要校正
             if  (offset  <   0 {
                offset 
    +=  daysOfMonth;
                
    -- iMonth;
                
    -- monCyl;
            }

            month 
    =  iMonth;
            day 
    =  offset  +   1 ;
        }


        
    public   static  String getChinaDayString( int  day)  {
            String chineseTen[] 
    =   { " " " " " 廿 " " " } ;
            
    int  n  =  day  %   10   ==   0   ?   9  : day  %   10   -   1 ;
            
    if  (day  >   30 )
                
    return   "" ;
            
    if  (day  ==   10 )
                
    return   " 初十 " ;
            
    else
                
    return  chineseTen[day  /   10 +  chineseNumber[n];
        }


        
    public  String toString()  {
            
    return  year  +   " "   +  (leap  ?   " "  :  "" +  chineseNumber[month  -   1 +   " "   +  getChinaDayString(day);
        }


        
    public   static   void  main(String[] args)  throws  ParseException  {
            Calendar today 
    =  Calendar.getInstance();
            today.setTime(chineseDateFormat.parse(
    " 2003年1月1日 " ));
            Lunar lunar 
    =   new  Lunar(today);

            System.out.println(
    " 北京時(shí)間: "   +  chineseDateFormat.format(today.getTime())  +   "  農(nóng)歷 "   +  lunar);
        }

    }
     

    posted on 2009-04-09 17:37 找個(gè)美女做老婆 閱讀(294) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 一区二区三区四区免费视频| 久久国产福利免费| 性xxxxx免费视频播放| 亚洲av中文无码乱人伦在线r▽| 91成人免费福利网站在线| 久久久久亚洲av成人无码电影| 理论秋霞在线看免费| 免费亚洲视频在线观看| 黄色免费网址大全| 亚洲一本大道无码av天堂| 国产免费伦精品一区二区三区| 亚洲综合熟女久久久30p| 黄网站色视频免费在线观看的a站最新| 中文字幕亚洲不卡在线亚瑟| 国产精品免费一区二区三区| 黑人精品videos亚洲人| 一级毛片免费观看不卡的| 亚洲黄色在线观看视频| 99在线视频免费观看视频| 亚洲最大天堂无码精品区| 午夜私人影院免费体验区| 菠萝菠萝蜜在线免费视频| 久久亚洲国产精品五月天婷| 国产成人免费AV在线播放| 亚洲性无码av在线| 毛片a级毛片免费播放下载| 国产精品日本亚洲777| 久久久久国产成人精品亚洲午夜 | 免费在线一级毛片| 成人一区二区免费视频| 亚洲最大的成网4438| 免费人成视频在线| 精品乱子伦一区二区三区高清免费播放 | 日韩在线观看视频免费| 亚洲AV无码成人精品区天堂| 永久免费AV无码国产网站| 免费中文字幕视频| 亚洲综合久久久久久中文字幕| 成人毛片18女人毛片免费| 精选影视免费在线 | 亚洲欧洲另类春色校园小说|