農歷java
Ⅰ java日歷 要有農歷顯示
網上搜一下,應該會有
Ⅱ 急需「農歷日歷JAVA代碼」
http://netroom.hbu.e.cn/personal/wenyuxuan/yan/yantime011.htm
(把代碼復制到一個新空白網頁中即可,別看演示,演示的代碼不對)
代碼如下:
<SCRIPT language=JavaScript>
<!--
/*****************************************************************************
日期資料
*****************************************************************************/
var lunarInfo=new Array(
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)
var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
var Animals=new Array("鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬");
var solarTerm = new Array("小寒","大寒","立春","雨水","驚蟄","春分","清明","穀雨","立夏","小滿","芒種","夏至","小暑","大暑","立秋","處暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至")
var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758)
var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十')
var nStr2 = new Array('初','十','廿','卅',' ')
var monthName = new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");
//國歷節日 *表示放假日
var sFtv = new Array(
"0101*元旦",
"0214 情人節",
"0308 婦女節",
"0312 植樹節",
"0315 消費者權益日",
"0317 St. Patrick's",
"0401 愚人節",
"0501 勞動節",
"0504 青年節",
"0512 護士節",
"0512 茵生日",
"0601 兒童節",
"0614 Flag Day",
"0701 建黨節 香港回歸紀念",
"0703 炎黃在線誕辰",
"0718 托普誕辰",
"0801 建軍節",
"0808 父親節",
"0909 毛澤東逝世紀念",
"0910 教師節",
"0928 孔子誕辰",
"1001*國慶節",
"1006 老人節",
"1024 聯合國日",
"1111 Veteran's / Remembrance Day",
"1112 孫中山誕辰紀念",
"1220 澳門回歸紀念",
"1225 Christmas Day",
"1226 毛澤東誕辰紀念")
//農歷節日 *表示放假日
var lFtv = new Array(
"0101*春節",
"0115 元宵節",
"0328 我生日",
"0505 端午節",
"0707 七夕情人節",
"0715 中元節",
"0815 中秋節",
"0909 重陽節",
"1208 臘八節",
"1224 小年",
"0100*除夕")
//某月的第幾個星期幾
var wFtv = new Array(
"0131 Martin Luther King Day",
"0231 President's Day",
"0520 母親節",
"0530 Armed Forces Day",
"0531 Victoria Day",
"0716 合作節",
"0730 被奴役國家周",
"0811 Civic Holiday",
"0911 Labor Holiday",
"1021 Columbus Day",
"1144 Thanksgiving")
/*****************************************************************************
日期計算
*****************************************************************************/
//====================================== 傳回農歷 y年的總天數
function lYearDays(y) {
var i, sum = 348
for(i=0x8000; i>0x8; i>>=1) sum += (lunarInfo[y-1900] & i)? 1: 0
return(sum+leapDays(y))
}
//====================================== 傳回農歷 y年閏月的天數
function leapDays(y) {
if(leapMonth(y)) return((lunarInfo[y-1900] & 0x10000)? 30: 29)
else return(0)
}
//====================================== 傳回農歷 y年閏哪個月 1-12 , 沒閏傳回 0
function leapMonth(y) {
return(lunarInfo[y-1900] & 0xf)
}
//====================================== 傳回農歷 y年m月的總天數
function monthDays(y,m) {
return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 )
}
//====================================== 算出農歷, 傳入日期物件, 傳回農歷日期物件
// 該物件屬性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl
function Lunar(objDate) {
var i, leap=0, temp=0
var baseDate = new Date(1900,0,31)
var offset = (objDate - baseDate)/86400000
this.dayCyl = offset + 40
this.monCyl = 14
for(i=1900; i<2050 && offset>0; i++) {
temp = lYearDays(i)
offset -= temp
this.monCyl += 12
}
if(offset<0) {
offset += temp;
i--;
this.monCyl -= 12
}
this.year = i
this.yearCyl = i-1864
leap = leapMonth(i) //閏哪個月
this.isLeap = false
for(i=1; i<13 && offset>0; i++) {
//閏月
if(leap>0 && i==(leap+1) && this.isLeap==false)
{ --i; this.isLeap = true; temp = leapDays(this.year); }
else
{ temp = monthDays(this.year, i); }
//解除閏月
if(this.isLeap==true && i==(leap+1)) this.isLeap = false
offset -= temp
if(this.isLeap == false) this.monCyl ++
}
if(offset==0 && leap>0 && i==leap+1)
if(this.isLeap)
{ this.isLeap = false; }
else
{ this.isLeap = true; --i; --this.monCyl;}
if(offset<0){ offset += temp; --i; --this.monCyl; }
this.month = i
this.day = offset + 1
}
//==============================傳回國歷 y年某m+1月的天數
function solarDays(y,m) {
if(m==1)
return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28)
else
return(solarMonth[m])
}
//============================== 傳入 offset 傳回干支, 0=甲子
function cyclical(num) {
return(Gan[num%10]+Zhi[num%12])
}
//============================== 月歷屬性
function calElement(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) {
this.isToday = false;
//國歷
this.sYear = sYear;
this.sMonth = sMonth;
this.sDay = sDay;
this.week = week;
//農歷
this.lYear = lYear;
this.lMonth = lMonth;
this.lDay = lDay;
this.isLeap = isLeap;
//干支
this.cYear = cYear;
this.cMonth = cMonth;
this.cDay = cDay;
this.color = '';
this.lunarFestival = ''; //農歷節日
this.solarFestival = ''; //國歷節日
this.solarTerms = ''; //節氣
}
//===== 某年的第n個節氣為幾日(從0小寒起算)
function sTerm(y,n) {
var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) )
return(offDate.getUTCDate())
}
//============================== 傳回月歷物件 (y年,m+1月)
function calendar(y,m) {
var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2
var lDPOS = new Array(3)
var n = 0
var firstLM = 0
sDObj = new Date(y,m,1) //當月一日日期
this.length = solarDays(y,m) //國歷當月天數
this.firstWeek = sDObj.getDay() //國歷當月1日星期幾
for(var i=0;i<this.length;i++) {
if(lD>lX) {
sDObj = new Date(y,m,i+1) //當月一日日期
lDObj = new Lunar(sDObj) //農歷
lY = lDObj.year //農歷年
lM = lDObj.month //農歷月
lD = lDObj.day //農歷日
lL = lDObj.isLeap //農歷是否閏月
lX = lL? leapDays(lY): monthDays(lY,lM) //農歷當月最後一天
if(n==0) firstLM = lM
lDPOS[n++] = i-lD+1
}
//sYear,sMonth,sDay,week,
//lYear,lMonth,lDay,isLeap,
//cYear,cMonth,cDay
this[i] = new calElement(y, m+1, i+1, nStr1[(i+this.firstWeek)%7],
lY, lM, lD++, lL,
cyclical(lDObj.yearCyl) ,cyclical(lDObj.monCyl), cyclical(lDObj.dayCyl++) )
if((i+this.firstWeek)%7==0) this[i].color = 'red' //周日顏色
if((i+this.firstWeek)%14==13) this[i].color = 'red' //周休二日顏色
}
//節氣
tmp1=sTerm(y,m*2 )-1
tmp2=sTerm(y,m*2+1)-1
this[tmp1].solarTerms = solarTerm[m*2]
this[tmp2].solarTerms = solarTerm[m*2+1]
if(m==3) this[tmp1].color = 'red' //清明顏色
//國歷節日
for(i in sFtv)
if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/))
if(Number(RegExp.$1)==(m+1)) {
this[Number(RegExp.$2)-1].solarFestival += RegExp.$4 + ' '
if(RegExp.$3=='*') this[Number(RegExp.$2)-1].color = 'red'
}
//月周節日
for(i in wFtv)
if(wFtv[i].match(/^(\d{2})(\d)(\d)([\s\*])(.+)$/))
if(Number(RegExp.$1)==(m+1)) {
tmp1=Number(RegExp.$2)
tmp2=Number(RegExp.$3)
this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5 + ' '
}
//農歷節日
for(i in lFtv)
if(lFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) {
tmp1=Number(RegExp.$1)-firstLM
if(tmp1==-11) tmp1=1
if(tmp1 >=0 && tmp1<n) {
tmp2 = lDPOS[tmp1] + Number(RegExp.$2) -1
if( tmp2 >= 0 && tmp2<this.length) {
this[tmp2].lunarFestival += RegExp.$4 + ' '
if(RegExp.$3=='*') this[tmp2].color = 'red'
}
}
}
//黑色星期五
if((this.firstWeek+12)%7==5)
this[12].solarFestival += '黑色星期五 '
//今日
if(y==tY && m==tM) this[tD-1].isToday = true;
}
//====================== 中文日期
function cDay(d){
var s;
switch (d) {
case 10:
s = '初十'; break;
case 20:
s = '二十'; break;
break;
case 30:
s = '三十'; break;
break;
default :
s = nStr2[Math.floor(d/10)];
s += nStr1[d%10];
}
return(s);
}
///////////////////////////////////////////////////////////////////////////////
var cld;
function drawCld(SY,SM) {
var i,sD,s,size;
cld = new calendar(SY,SM);
if(SY>1874 && SY<1909) yDisplay = '光緒' + (((SY-1874)==1)?'元':SY-1874)
if(SY>1908 && SY<1912) yDisplay = '宣統' + (((SY-1908)==1)?'元':SY-1908)
if(SY>1911 && SY<1950) yDisplay = '民國' + (((SY-1911)==1)?'元':SY-1911)
// if(SY>1949) yDisplay = '共和國' + (((SY-1949)==1)?'元':SY-1949)
// GZ.innerHTML = yDisplay +'年 農歷' + cyclical(SY-1900+36) + '年 【'+Animals[(SY-4)%12]+'】';
if(SY>1949) yDisplay = ''
GZ.innerHTML = yDisplay +' 農歷' + cyclical(SY-1900+36) + '年 【'+Animals[(SY-4)%12]+'】';
YMBG.innerHTML = "" + SY + "<BR>" + monthName[SM];
for(i=0;i<42;i++) {
sObj=eval('SD'+ i);
lObj=eval('LD'+ i);
sObj.className = '';
sD = i - cld.firstWeek;
if(sD>-1 && sD<cld.length) { //日期內
sObj.innerHTML = sD+1;
if(cld[sD].isToday) sObj.className = 'todyaColor'; //今日顏色
sObj.style.color = cld[sD].color; //國定假日顏色
if(cld[sD].lDay==1) //顯示農歷月
lObj.innerHTML = '<b>'+(cld[sD].isLeap?'閏':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>';
else //顯示農歷日
lObj.innerHTML = cDay(cld[sD].lDay);
s=cld[sD].lunarFestival;
if(s.length>0) { //農歷節日
if(s.length>6) s = s.substr(0, 4)+'…';
s = s.fontcolor('red');
}
else { //國歷節日
s=cld[sD].solarFestival;
if(s.length>0) {
size = (s.charCodeAt(0)>0 && s.charCodeAt(0)<128)?8:4;
if(s.length>size+2) s = s.substr(0, size)+'…';
s = s.fontcolor('blue');
}
else { //廿四節氣
s=cld[sD].solarTerms;
if(s.length>0) s = s.fontcolor('limegreen');
}
}
if(s.length>0) lObj.innerHTML = s;
}
else { //非日期
sObj.innerHTML = '';
lObj.innerHTML = '';
}
}
}
function changeLong()
{
var y,m,ly,lm,id,im,iy,yangy,yangm,deltm,miny,tt;
CLD.SY.selectedIndex=CLD.D1.selectedIndex;
CLD.SM.selectedIndex=CLD.D2.selectedIndex;
yangm=0;yangy=0;
tt=true;
while (tt)
{
yangm=0;yangy=0;
changeCld();
for(i=0;i<42;i++)
{
sD = i - cld.firstWeek;
if(sD>-1 && sD<cld.length)
{ //日期內
if ((cld[sD].lMonth==CLD.D2.selectedIndex+1)&&(cld[sD].lYear==CLD.D1.selectedIndex+1900))
{
yangy=CLD.SY.selectedIndex+1900; yangm=CLD.SM.selectedIndex ;
tt=false;
break;
}
}
}
if (!tt) break;
pushBtm('MD');
changeCld();
// alert(CLD.SY.selectedIndex+" "+CLD.SM.selectedIndex);
for(i=0;i<42;i++)
{
sD = i - cld.firstWeek;
if(sD>-1 && sD<cld.length)
{ //日期內
if ((cld[sD].lMonth==CLD.D2.selectedIndex+1)&&(cld[sD].lYear==CLD.D1.selectedIndex+1900))
{
yangy=CLD.SY.selectedIndex+1900; yangm=CLD.SM.selectedIndex ;
tt=false;
break;
}
}
}
break;
}
// alert(yangy+" "+yangm);
//CLD.SY.selectedIndex=yangy;//-1900;
//pushBtm('YU');
//pushBtm('YD');
CLD.SM.selectedIndex=yangm;
pushBtm('MD');
pushBtm('MU');
}
//changeLong end
function changeCld() {
var y,m;
y=CLD.SY.selectedIndex+1900;
m=CLD.SM.selectedIndex;
drawCld(y,m);
}
function pushBtm(K) {
switch (K){
case 'YU' :
if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--;
break;
case 'YD' :
if(CLD.SY.selectedIndex<149) CLD.SY.selectedIndex++;
break;
case 'MU' :
if(CLD.SM.selectedIndex>0) {
CLD.SM.selectedIndex--;
}
else {
CLD.SM.selectedIndex=11;
if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--;
}
break;
case 'MD' :
if(CLD.SM.selectedIndex<11) {
CLD.SM.selectedIndex++;
}
else {
CLD.SM.selectedIndex=0;
if(CLD.SY.selectedIndex<149) CLD.SY.selectedIndex++;
}
break;
default :
CLD.SY.selectedIndex=tY-1900;
CLD.SM.selectedIndex=tM;
}
changeCld();
}
var Today = new Date();
var tY = Today.getFullYear();
var tM = Today.getMonth();
var tD = Today.getDate();
//////////////////////////////////////////////////////////////////////////////
var width = "130";
var offsetx = 2;
var offsety = 16;
var x = 0;
var y = 0;
var snow = 0;
var sw = 0;
var cnt = 0;
var dStyle;
document.onmousemove = mEvn;
//顯示詳細日期資料
function mOvr(v) {
var s,festival;
var sObj=eval('SD'+ v);
var d=sObj.innerHTML-1;
//sYear,sMonth,sDay,week,
//lYear,lMonth,lDay,isLeap,
//cYear,cMonth,cDay
if(sObj.innerHTML!='') {
sObj.style.cursor = 's-resize';
if(cld[d].solarTerms == '' && cld[d].solarFestival == '' && cld[d].lunarFestival == '')
festival = '';
else
festival = '<TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 BGCOLOR="#CCFFCC"><TR><TD>'+
'<FONT COLOR="#000000" STYLE="font-size:9pt;">'+cld[d].solarTerms + ' ' + cld[d].solarFestival + ' ' + cld[d].lunarFestival+'</FONT></TD>'+
'</TR></TABLE>';
s= '<TABLE WIDTH="130" BORDER=0 CELLPADDING="2" CELLSPACING=0 BGCOLOR="#000066"><TR><TD>' +
'<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD ALIGN="right"><FONT COLOR="#ffffff" STYLE="font-size:9pt;">'+
cld[d].sYear+' 年 '+cld[d].sMonth+' 月 '+cld[d].sDay+' 日<br>星期'+cld[d].week+'<br>'+
'<font color="violet">農歷'+(cld[d].isLeap?'閏 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日</font><br>'+
'<font color="yellow">'+cld[d].cYear+'年 '+cld[d].cMonth+'月 '+cld[d].cDay + '日</font>'+
'</FONT></TD></TR></TABLE>'+ festival +'</TD></TR></TABLE>';
document.all["detail"].innerHTML = s;
if (snow == 0) {
dStyle.left = x+offsetx-(width/2);
dStyle.top = y+offsety;
dStyle.visibility = "visible";
snow = 1;
}
}
}
//清除詳細日期資料
function mOut() {
if ( cnt >= 1 ) { sw = 0 }
if ( sw == 0 ) { snow = 0; dStyle.visibility = "hidden";}
else cnt++;
}
//取得位置
function mEvn() {
x=event.x;
y=event.y;
if (document.body.scrollLeft)
{x=event.x+document.body.scrollLeft; y=event.y+document.body.scrollTop;}
if (snow){
dStyle.left = x+offsetx-(width/2)
dStyle.top = y+offsety
}
}
///////////////////////////////////////////////////////////////////////////
function tick() {
var today
today = new Date()
Clock.innerHTML = today.toLocaleString().replace(/(年|月)/g, "/").replace(/日/, "");
// Clock.innerHTML = TimeAdd(today.toGMTString(), CLD.TZ.value)
window.setTimeout("tick()", 1000);
}
function setCookie(name, value) {
var today = new Date()
var expires = new Date()
expires.setTime(today.getTime() + 1000*60*60*24*365)
document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString()
}
function getCookie(Name) {
var search = Name + "="
if(document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if(offset != -1) {
offset += search.length
end = document.cookie.indexOf(";", offset)
if(end == -1) end = document.cookie.length
return unescape(document.cookie.substring(offset, end))
}
else return ""
}
}
/////////////////////////////////////////////////////////
function initial() {
dStyle = detail.style;
CLD.SY.selectedIndex=tY-1900;
CLD.SM.selectedIndex=tM;
drawCld(tY,tM);
// CLD.TZ.selectedIndex=getCookie("TZ");
// changeTZ();
tick();
}
//-->
</SCRIPT>
<STYLE>.todyaColor {
BACKGROUND-COLOR: aqua
}
</STYLE>
<META content="Microsoft FrontPage 4.0" name=GENERATOR></HEAD>
<BODY onload=initial()>
<SCRIPT language=JavaScript><!--
if(navigator.appName == "Netscape" || parseInt(navigator.appVersion) < 4)
document.write("<h1>你的瀏覽器無法執行此程序。</h1>此程序在 IE4 以後的版本才能執行!!")
//--></SCRIPT>
<DIV id=detail style="POSITION: absolute"></DIV>
<FORM name=CLD>
<div align="center">
<TABLE width="672" align="right" height="259" bordercolordark="#CC9900" border="4" background="l11.gif">
<CENTER>
<center>
<TBODY>
</center></center>
<TR>
<TD align=middle vAlign=top width="170" height="255">
<div align="center">
<center>
<TABLE BORDER=1 COLSPAN=2 width="221">
<CENTER>
<center><FONT size=2
style="FONT-SIZE: 9pt">
<td width="209">
<p align="center"><font style="font-size:10.8pt" color=RED>本地計算機時間:</FONT></FONT><BR><FONT color=#000080 face=ARIAL
id=Clock size=3 align="center"></FONT>
<P><!--時區 *表示自動調整為日光節約時間-->
</center>
</CENTER>
</TABLE>
</center>
</div>
<div align="center">
<center>
<table border=1 height="1" width="16">
<td height="1" width="255">
<table width="212" height="1"><CENTER>
<center>
<FONT id=tSave
style="COLOR: red; FONT-FAMILY: Wingdings; FONT
Ⅲ 關於eclipse做java萬年歷時的農歷問題
沒做過,但是你可以說說你遇到的問題,興許可以幫到你的
Ⅳ java怎麼取得農歷的節日
public 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 };
// ====== 傳回農歷 y年的總天數
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));
}
// ====== 傳回農歷 y年閏月的天數
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;
}
// ====== 傳回農歷 y年閏哪個月 1-12 , 沒閏傳回 0
final private static int leapMonth(int y)
{
return (int) (lunarInfo[y - 1900] & 0xf);
}
// ====== 傳回農歷 y年m月的總天數
final private static int monthDays(int y, int m)
{
if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)
return 29;
else
return 30;
}
// ====== 傳回農歷 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日對應的農歷. yearCyl3:農歷年與1864的相差數 ? monCyl4:從1900年1月31日以來,閏月數
* dayCyl5:與1900年1月31日相差的天數,再加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日相差的天數
int offset = (int) ((cal.getTime().getTime() - baseDate.getTime()) / 86400000L);
dayCyl = offset + 40;
monCyl = 14;
// 用offset減去每農歷年的天數
// 計算當天是農歷第幾天
// i最終結果是農歷的年份
// 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;
}
// 農歷年份
year = iYear;
yearCyl = iYear - 1864;
leapMonth = leapMonth(iYear); // 閏哪個月,1-12
leap = false;
// 用當年的天數offset,逐個減去每月(農歷)的天數,求出當天是本月的第幾天
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()
{// 返回阿拉伯數字的陰歷日期
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];
}
}
Ⅳ 有誰會用java寫農歷轉公歷
您題目所說的,答:【沒有】! 因為地球是圍著太陽旋轉的,太陽又圍著銀河系的某個中心旋轉的。 於是,沒有一年與多少年之後之前的某一年的公歷農歷是相同的。 僅僅有【百年星期檢查表】,也就是查查公歷某年某月某日是星期幾而已。
Ⅵ java如何編寫簡單的農歷 知道的告訴我一下 我是菜鳥
其實就是簡單的用System.out.print()方法在終端上輸出。
你要做的工作就是控制什麼時候輸出空格,什麼時候輸出數字,什麼時候換行
另外還需要計算幾月幾日是星期幾,這個公式網上有,自己找吧
另外還涉及到平年潤年的判斷。
自己寫吧,不難的
Ⅶ java中陰歷的表示方法
classMyChinaDate
{
intm;
String[]month={"一","二","三","四","五","六","七","八","九","十","十一","十二"};
String[]day={"初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","廿十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};
publicvoidgetmonth(intn)
{
m=n;
if(m>=1&&m<=12)
{
switch(m)
{
case1:System.out.print("正月");break;
case12:System.out.print("臘月");break;
default:System.out.print(month[m-1]+"月");
}
}
}
publicvoidgetday(intn)
{
m=n;
if(m>=1&&m<=30)
{
System.out.println(day[m-1]);
}
}
}
publicclassMyTest
{
publicstaticvoidmain(String[]args)
{
MyChinaDatet=newMyChinaDate();
t.getmonth(1);
t.getday(6);
t.getmonth(8);
t.getday(22);
t.getmonth(12);
t.getday(30);
t.getmonth(13);
t.getday(31);
}
}
Ⅷ java計算農歷日期
import java.util.Scanner;public class PrintCalendar { /**
* @param args
*/
public static void main(String[] args) {
System.out.println("******************歡 迎 使 用 萬 年 歷******************");
Scanner input = new Scanner(System.in);
System.out.print("\n請選擇年份: ");
int year = input.nextInt();
System.out.print("\n請選擇月份: ");
int month = input.nextInt();
System.out.println(); int days = 0; // 存儲當月的天數
boolean isRn;
/* 判斷是否是閏年 */
if (year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0) { // 判斷是否為閏年
isRn = true; // 閏年
} else {
isRn = false;// 平年
} /* 計算輸入的年份之前的天數 */
int totalDays = 0;
for (int i = 1900; i < year; i++) {
/* 判斷閏年或平年,並進行天數累加 */
if (i % 4 == 0 && !(i % 100 == 0) || i % 400 == 0) { // 判斷是否為閏年
totalDays = totalDays + 366; // 閏年366天
} else {
totalDays = totalDays + 365; // 平年365天
}
} /* 計算輸入月份之前的天數 */
int beforeDays = 0;
for (int i = 1; i <= month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if (isRn) {
days = 29;
} else {
days = 28;
}
break;
default:
days = 30;
break;
}
if (i < month) {
beforeDays = beforeDays + days;
}
}
totalDays = totalDays + beforeDays; // 距離1900年1月1日的天數 /* 計算星期幾 */
int firstDayOfMonth; // 存儲當月第一天是星期幾:星期日為0,星期一~星期六為1~6
int temp = 1 + totalDays % 7; // 從1900年1月1日推算
if (temp == 7) { // 求當月第一天
firstDayOfMonth = 0; // 周日
} else {
firstDayOfMonth = temp;
} /* 輸出日歷 */
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int nullNo = 0; nullNo < firstDayOfMonth; nullNo++) {
System.out.print("\t"); // 輸出空格
}
for (int i = 1; i <= days; i++) {
System.out.print(i + "\t");
if ((totalDays + i - 1) % 7 == 5) { // 如果當天為周六,輸出換行
System.out.println();
}
}
}
}
Ⅸ java 獲取當前時間的農歷
找個萬年歷的插件。獲得農歷的方法估計有
Ⅹ java中怎麼把公歷日期轉成農歷日期
Excel可以實現中陽歷日期轉換成陰歷日期,具體操作如下:
一、使用工具:excel2010
二、操作步驟:
1、假設A1為陽歷日期,B1為轉換後的陰歷日期值,點擊B1單元格輸入以下代碼:
=CHOOSE(MOD(YEAR(LEFT(TEXT(A1,"[$-130000]yyyy年mm月"&IF(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"dd"),4)&"-"&MID(TEXT(A1,"[$-130000]yyyy年mm月"&IF(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"dd"),6,2)&"-"&RIGHT(TEXT(A1,"[$-130000]yyyy年mm月"&IF(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"dd"),2))-1900,10)+1,"庚","辛","壬","癸","甲","乙","丙","丁","戊","己")&CHOOSE(MOD(YEAR(LEFT(TEXT(A1,"[$-130000]yyyy年mm月"&IF(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"dd"),4)&"-"&MID(TEXT(A1,"[$-130000]yyyy年mm月"&IF(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"dd"),6,2)&"-"&RIGHT(TEXT(A1,"[$-130000]yyyy年mm月"&IF(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"dd"),2))-1900,12)+1,"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥")&TEXT(A1,"[dbnum1][$-130000]年m月"&IF(--TEXT(A1,"[$-130000]d")<11,"初","")&TEXT(A1,"[dbnum1][$-130000]d日"))
如圖: