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

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

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

    Java學習

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

     

    陽歷轉陰歷

    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年閏哪個月 1-12 , 沒閏傳回 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日對應的農(nóng)歷.
         * yearCyl3:農(nóng)歷年與1864的相差數(shù)              ?
         * monCyl4:從1900年1月31日以來,閏月數(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ù)
            
    //  計算當天是農(nóng)歷第幾天
            
    // i最終結果是農(nóng)歷的年份
            
    // offset是當年的第幾天
             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);  // 閏哪個月,1-12
            leap  =   false ;

            
    // 用當年的天數(shù)offset,逐個減去每月(農(nóng)歷)的天數(shù),求出當天是本月的第幾天
             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時,并且剛才計算的月份是閏月,要校正
             if  (offset  ==   0   &&  leapMonth  >   0   &&  iMonth  ==  leapMonth  +   1 {
                
    if  (leap)  {
                    leap 
    =   false ;
                }
      else   {
                    leap 
    =   true ;
                    
    -- iMonth;
                    
    -- monCyl;
                }

            }

            
    // offset小于0時,也要校正
             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(
    " 北京時間: "   +  chineseDateFormat.format(today.getTime())  +   "  農(nóng)歷 "   +  lunar);
        }

    }
     

    posted on 2009-04-09 17:37 找個美女做老婆 閱讀(293) 評論(0)  編輯  收藏


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


    網(wǎng)站導航:
     

    導航

    統(tǒng)計

    公告

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

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲欧洲日产国码av系列天堂| 免费特级黄毛片在线成人观看| 国产成人精品久久免费动漫| 亚洲精品免费在线| 亚洲欧美国产日韩av野草社区| 亚洲乱码中文字幕在线| 搜日本一区二区三区免费高清视频 | 免费a级毛片大学生免费观看| AV大片在线无码永久免费| 久久久久国色AV免费看图片 | 99re免费视频| 两性色午夜免费视频| 欧洲人免费视频网站在线| 91精品国产免费久久久久久青草| 成人无遮挡毛片免费看| 亚洲免费二区三区| 午夜毛片不卡免费观看视频| 美女视频黄的全免费视频| 国产成人青青热久免费精品 | 成全高清视频免费观看| 亚洲精品国精品久久99热| 国产人成免费视频| 国产在线观看免费视频播放器| 超清首页国产亚洲丝袜| 亚洲综合久久1区2区3区| 亚洲视频中文字幕在线| 亚洲人成亚洲精品| 亚洲精品天堂成人片AV在线播放| 国产午夜亚洲精品| 国产精品青草视频免费播放| 国产免费区在线观看十分钟| aa级女人大片喷水视频免费| 免费专区丝袜脚调教视频| 免费一级一片一毛片| 亚洲尹人九九大色香蕉网站| 亚洲色偷偷av男人的天堂| 狠狠热精品免费观看| 免费能直接在线观看黄的视频 | 亚洲第一区精品日韩在线播放| 中文字幕在线观看亚洲| 农村寡妇一级毛片免费看视频|