|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)夏历importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
publicclassLunar{
privateintyear;
privateintmonth;
privateintday;
privatebooleanleap;
finalstaticStringchineseNumber[]={"一","二","三","四","五","六","七","八","九","十","十一","十二"};
staticSimpleDateFormatchineseDateFormat=newSimpleDateFormat("yyyy年MM月dd日");
finalstaticlong[]lunarInfo=newlong[]
{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年的总天数
finalprivatestaticintyearDays(inty){
inti,sum=348;
for(i=0x8000;i>0x8;i>>=1){
if((lunarInfo[y-1900]&i)!=0)sum+=1;
}
return(sum+leapDays(y));
}
//======传回夏历y年闰月的天数
finalprivatestaticintleapDays(inty){
if(leapMonth(y)!=0){
if((lunarInfo[y-1900]&0x10000)!=0)
return30;
else
return29;
}else
return0;
}
//======传回夏历y年闰哪一个月1-12,没闰传回0
finalprivatestaticintleapMonth(inty){
return(int)(lunarInfo[y-1900]&0xf);
}
//======传回夏历y年m月的总天数
finalprivatestaticintmonthDays(inty,intm){
if((lunarInfo[y-1900]&(0x10000>>m))==0)
return29;
else
return30;
}
//======传回夏历y年的生肖
finalpublicStringanimalsYear(){
finalString[]Animals=newString[]{"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};
returnAnimals[(year-4)%12];
}
//======传进月日的offset传回干支,0=甲子
finalprivatestaticStringcyclicalm(intnum){
finalString[]Gan=newString[]{"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
finalString[]Zhi=newString[]{"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
return(Gan[num%10]+Zhi[num%12]);
}
//======传进offset传回干支,0=甲子
finalpublicStringcyclical(){
intnum=year-1900+36;
return(cyclicalm(num));
}
/**
*传出y年m月d日对应的夏历.
*yearCyl3:夏历年与1864的相差数?
*monCyl4:从1900年1月31日以来,闰月数
*dayCyl5:与1900年1月31日相差的天数,再加40?
*@paramcal
*@return
*/
publicLunar(Calendarcal){
intyearCyl,monCyl,dayCyl;
intleapMonth=0;
DatebaseDate=null;
try{
baseDate=chineseDateFormat.parse("1900年1月31日");
}catch(ParseExceptione){
e.printStackTrace();//TochangebodyofcatchstatementuseOptions|FileTemplates.
}
//求出和1900年1月31日相差的天数
intoffset=(int)((cal.getTime().getTime()-baseDate.getTime())/86400000L);
dayCyl=offset+40;
monCyl=14;
//用offset减往每夏历年的天数
//盘算当天是夏历第几天
//i终极了局是夏历的年份
//offset是昔时的第几天
intiYear,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,逐一减往每个月(夏历)的天数,求出当天是本月的第几天
intiMonth,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;
}
publicstaticStringgetChinaDayString(intday){
StringchineseTen[]={"初","十","廿","卅"};
intn=day%10==0?9:day%10-1;
if(day>30)
return"";
if(day==10)
return"初十";
else
returnchineseTen[day/10]+chineseNumber[n];
}
publicStringtoString(){
returnyear+"年"+(leap?"闰":"")+chineseNumber[month-1]+"月"+getChinaDayString(day);
}
publicstaticvoidmain(String[]args)throwsParseException{
Calendartoday=Calendar.getInstance();
today.setTime(chineseDateFormat.parse("2003年12月17日"));
Lunarlunar=newLunar(today);
System.out.println("北京工夫:"+chineseDateFormat.format(today.getTime())+" 夏历"+lunar);
}
}
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。 |
|