仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1635|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA编程:指定日期的夏历日期

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:43:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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,实现无缝刷新。
因胸联盟 该用户已被删除
沙发
发表于 2015-1-21 13:22:13 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
深爱那片海 该用户已被删除
板凳
发表于 2015-1-25 16:38:47 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
柔情似水 该用户已被删除
地板
发表于 2015-2-2 11:00:52 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
莫相离 该用户已被删除
5#
发表于 2015-2-6 22:18:19 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
冷月葬花魂 该用户已被删除
6#
发表于 2015-2-8 19:07:39 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
金色的骷髅 该用户已被删除
7#
发表于 2015-2-25 22:44:19 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
再现理想 该用户已被删除
8#
发表于 2015-3-8 08:10:02 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
变相怪杰 该用户已被删除
9#
发表于 2015-3-8 16:21:42 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
飘飘悠悠 该用户已被删除
10#
发表于 2015-3-10 12:54:33 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
小魔女 该用户已被删除
11#
发表于 2015-3-17 07:11:06 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
若天明 该用户已被删除
12#
发表于 2015-3-22 05:09:17 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
灵魂腐蚀 该用户已被删除
13#
发表于 2015-3-23 08:19:57 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
老尸 该用户已被删除
14#
发表于 2015-4-10 06:49:36 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
分手快乐 该用户已被删除
15#
发表于 2015-4-12 23:55:01 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
admin 该用户已被删除
16#
发表于 2015-4-16 05:10:22 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
再见西城 该用户已被删除
17#
发表于 2015-4-21 21:50:12 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
兰色精灵 该用户已被删除
18#
发表于 2015-4-24 21:56:44 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
蒙在股里 该用户已被删除
19#
发表于 2015-4-26 00:09:14 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
第二个灵魂 该用户已被删除
20#
 楼主| 发表于 2015-5-2 00:04:13 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 15:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表