西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)java → 比較綜合的陰歷和陽歷的java源程序

比較綜合的陰歷和陽歷的java源程序

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:本站整理時間:2010/11/16 16:54:04字體大小:A-A+

作者:佚名點擊:197次評論:8次標簽: Java

  • 類型:行業(yè)軟件大。7.3M語言:中文 評分:10.0
  • 標簽:
立即下載
3 頁 比較陰歷陽歷3


/*
 *以下是陰歷對象;
 * 是從網(wǎng)絡(luò)中得來的;
 */
  class  Lunar  {
     private   int  year;
     private   int  month;
     private   int  day;
     private   boolean  leap;
     final   static  String chineseNumber[]  =   { "一","二","三","四","五","六","七","八","九","十","十一","十二"};
     final   static  String Big_Or_Small[]  =    { "大","小","大","小","大","小","大","大","小","大","小"  ,"大"};
     private String[] LunarHolDayName =
            {
                "小寒", "大寒", "立春", "雨水",
                "驚蟄", "春分", "清明", "谷雨",
                "立夏", "小滿", "芒種", "夏至",
                "小暑", "大暑", "立秋", "處暑",
                "白露", "秋分", "寒露", "霜降",
                "立冬", "小雪", "大雪", "冬至"};


    
     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日對應(yīng)的農(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)  {
      //cal.add(cal.get(Calendar.DAY_OF_MONTH),1);
        @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ù)
         //  計算當(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);  // 閏哪個月,1-12
        leap  =   false ;


         // 用當(dāng)年的天數(shù)offset,逐個減去每月(農(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時,并且剛才計算的月份是閏月,要校正
         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  /*cyclical() +   "年"   + */ (leap  ?   "閏"  :  "" )  +  chineseNumber[month  -   1 ]  +   "月"   +  getChinaDayString(day);
    }
    public String numeric_md(){//返回阿拉伯?dāng)?shù)字的陰歷日期
     String temp_day;
     String temp_mon;
     temp_mon=month<10?"0"+month:""+month;
     temp_day=day < 10?"0"+ day:""+ day;
     
     return temp_mon+temp_day;
    }
    public String get_month(){//返回陰歷的月份
     return chineseNumber[month  -   1 ];
    }
    public String get_date(){//返回陰歷的天
     return getChinaDayString(day);
    }
    public String get_Big_Or_Small(){//返回的月份的大或小
     return Big_Or_Small[month  -   1 ];
    }
   
   
}
  class SwingConsole {//提供安全線程機制
 public static void run(final JFrame f,final int width,final int height){
  SwingUtilities.invokeLater(new Runnable(){
   public void run(){
   
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(width,height);
    f.setVisible(true);
   }
  });
 }
}

本文導(dǎo)航
    PPT圖表
    (111)PPT圖表
    我們在制作各類的時候,或多或少的都能用到圖表。圖表它可以直觀的展示出各種信息數(shù)據(jù),有了圖表你就可以很好的將數(shù)據(jù)更直觀準確的表達出來。小編在這里為大家搜集整理了一些大家可能會用到的圖表模板,歡迎有需要的各位前來下載。...更多>>

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(8)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)