若相依 发表于 2015-1-18 11:47:50

JAVA网页编程之一些无聊的代码之一:JAVA中的日期盘算...

先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。
/**DateCalculate.java,Createdon2005-3-18*Copyright2005AAAInformationTechnologyCO.LTD.Allrightsreserved.**作成日期:2005-3-18*修正经历:**/packagecom.bjb.xyh.util;

importjava.text.DecimalFormat;//importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;

/***类形貌:本人完成的日期盘算类,能够自在扩大*@authorxieyhlamp5w@yahoo.com.cn*@versionbuild2005-3-18**/publicclassDateCalculate{/**注重格里历和儒略历交代时的日期不同*/privatestatictransientintgregorianCutoverYear=1582;/**闰年中每个月天数*/privatestaticfinalint[]DAYS_P_MONTH_LY={31,29,31,30,31,30,31,31,30,31,30,31};/**闰年中每个月天数*/privatestaticfinalint[]DAYS_P_MONTH_CY={31,28,31,30,31,30,31,31,30,31,30,31};/**代表数组里的年、月、日*/privatestaticfinalintY=0,M=1,D=2;/**介入运算用*/privateint[]ymd=null;

/***反省传进的参数是不是正当的日期*@paramdate*@throwsIllegalArgumentException*/publicstaticvoidvalidate(Stringdate)throwsIllegalArgumentException{int[]ymd=splitYMD(date);if(ymd==0||ymd>12){thrownewIllegalArgumentException("月份数值毛病");}if(true==isLeapYear(ymd)){if(ymd==0||ymd>DAYS_P_MONTH_LY-1]){thrownewIllegalArgumentException("日期数值毛病");}}else{if(ymd==0||ymd>DAYS_P_MONTH_CY-1]){thrownewIllegalArgumentException("日期数值毛病");}}}

/***反省传进的参数代表的年份是不是为闰年*@paramyear*@return*/publicstaticbooleanisLeapYear(intyear){returnyear>=gregorianCutoverYear?((year%4==0)&&((year%100!=0)||(year%400==0)))://Gregorian(year%4==0);//Julian}/***日期加1天,注重这里没有思索儒略历和格里历交代时相差的10天*@paramyear*@parammonth*@paramday*@return*/privateint[]addOneDay(intyear,intmonth,intday){if(isLeapYear(year)){day++;if(day>DAYS_P_MONTH_LY){month++;if(month>12){year++;month=1;}day=1;}}else{day++;if(day>DAYS_P_MONTH_CY){month++;if(month>12){year++;month=1;}day=1;}}int[]ymd={year,month,day};returnymd;}/***以轮回的体例盘算日期加法*@paramdate*@paramdays*@return*/publicStringaddDaysByLoop(Stringdate,intdays){validate(date);int[]ymd=splitYMD(date);for(inti=0;i<days;i++){ymd=addOneDay(ymd,ymd,ymd);}returnformatYear(ymd)+formatMonthDay(ymd)+formatMonthDay(ymd);}/***日期减1天,注重这里没有思索儒略历和格里历交代时相差的10天*@paramyear*@parammonth*@paramday*@return*/privateint[]reduceOneDay(intyear,intmonth,intday){if(isLeapYear(year)){day--;if(day<=0){month--;if(month<1){year--;month=12;}day=DAYS_P_MONTH_LY;}}else{day--;if(day<=0){month--;if(month<1){year--;month=12;}day=DAYS_P_MONTH_CY;}}int[]ymd={year,month,day};returnymd;}/***以轮回的体例盘算日期减法*@paramdate*@paramdays*@return*/publicStringreduceDaysByLoop(Stringdate,intdays){validate(date);int[]ymd=splitYMD(date);for(inti=0;i<days;i++){ymd=reduceOneDay(ymd,ymd,ymd);}returnformatYear(ymd)+formatMonthDay(ymd)+formatMonthDay(ymd);}/***指定日期加上指定的天数的操纵*@paramdate*@paramdays*@return*@throwsIllegalArgumentException*/publicStringaddDays(Datedate,intdays)throwsIllegalArgumentException{returnaddDays(formatDate(date),days);}/***指定日期加上指定的天数的操纵*@paramdate*@paramdays*@return*@throwsIllegalArgumentException*/publicStringaddDays(Stringdate,intdays)throwsIllegalArgumentException{validate(date);ymd=splitYMD(date);if(isLeapYear(ymd)){ymd+=days;if(ymd>DAYS_P_MONTH_LY-1]){ymd++;ymd=ymd-DAYS_P_MONTH_LY-1-1];if(ymd>12){ymd-=12;ymd++;}if(ymd>DAYS_P_MONTH_LY-1]){addDays(formatYear(ymd)+formatMonthDay(ymd)+formatMonthDay(DAYS_P_MONTH_LY-1]),ymd-DAYS_P_MONTH_LY-1]);}}}else{ymd+=days;if(ymd>DAYS_P_MONTH_CY-1]){ymd++;ymd=ymd-DAYS_P_MONTH_CY-1-1];if(ymd>12){ymd-=12;ymd++;}if(ymd>DAYS_P_MONTH_CY-1]){addDays(formatYear(ymd)+formatMonthDay(ymd)+formatMonthDay(DAYS_P_MONTH_CY-1]),ymd-DAYS_P_MONTH_CY-1]);}}}returnformatYear(ymd)+formatMonthDay(ymd)+formatMonthDay(ymd);}/***指定日期减往指定的天数的操纵*@paramdate*@paramdays*@return*@throwsIllegalArgumentException*/publicStringreduceDays(Datedate,intdays)throwsIllegalArgumentException{returnreduceDays(formatDate(date),days);}/***指定日期减往指定的天数的操纵*@paramdate*@paramdays*@return*@throwsIllegalArgumentException*/publicStringreduceDays(Stringdate,intdays)throwsIllegalArgumentException{validate(date);ymd=splitYMD(date);if(isLeapYear(ymd)){ymd-=days;if(ymd<=0){ymd--;if(ymd<1){ymd+=12;ymd--;}ymd=ymd+DAYS_P_MONTH_LY-1];if(ymd<=0){reduceDays(formatYear(ymd)+formatMonthDay(ymd)+formatMonthDay(1),abs(ymd-1));}}}else{ymd-=days;if(ymd<=0){ymd--;if(ymd<1){ymd+=12;ymd--;}ymd=ymd+DAYS_P_MONTH_CY-1];if(ymd<=0){reduceDays(formatYear(ymd)+formatMonthDay(ymd)+formatMonthDay(1),abs(ymd-1));}}}returnformatYear(ymd)+formatMonthDay(ymd)+formatMonthDay(ymd);}/***格局化一个日期字符串*@paramdate*@return*/publicstaticStringformatDate(Datedate){SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMdd");returnsdf.format(date);}/***将代表日期的字符串支解为代表年代日的整形数组*@paramdate*@return*/publicstaticint[]splitYMD(Stringdate){int[]ymd={0,0,0};ymd=Integer.parseInt(date.substring(0,4));ymd=Integer.parseInt(date.substring(4,6));ymd=Integer.parseInt(date.substring(6,8));returnymd;}/***将不敷两位的月份或日期补足为两位*@paramdecimal*@return*/publicstaticStringformatMonthDay(intdecimal){DecimalFormatdf=newDecimalFormat("00");returndf.format(decimal);}/***将不敷四位的年份补足为四位*@paramdecimal*@return*/publicstaticStringformatYear(intdecimal){DecimalFormatdf=newDecimalFormat("0000");returndf.format(decimal);}/***取相对值操纵*@paramnum*@return*/publicstaticintabs(intnum){return(num>0)?num:-num;}/***测试用main函数*@paramargs*/publicstaticvoidmain(String[]args)throwsException{StringcurrDate="20001231";StringcurrDate2="20001231";intdays=-36600;Datedate=null;DateCalculatedc=newDateCalculate();SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMdd");date=sdf.parse(currDate2);System.out.println(currDate+"+"+abs(days)+"days="+dc.addDays(currDate,abs(days)));System.out.println(currDate+"-"+abs(days)+"days="+dc.reduceDays(currDate,abs(days)));

Calendarcld=Calendar.getInstance();cld.setTime(date);cld.add(Calendar.DATE,abs(days));System.out.println(currDate2+"+"+abs(days)+"days="+sdf.format(cld.getTime()));cld=Calendar.getInstance();cld.setTime(date);cld.add(Calendar.DATE,days);System.out.println(currDate2+"-"+abs(days)+"days="+sdf.format(cld.getTime()));System.out.println(dc.addDaysByLoop(currDate2,abs(days)));System.out.println(dc.reduceDaysByLoop(currDate2,abs(days)));}}

写这些代码的念头来自比来进修SHELL剧本的感觉。

目标以下,先搁着,等偶然间再作增补:1.制止递回算法的滥用2.临界值的掌控3.日期盘算的细节

C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊

灵魂腐蚀 发表于 2015-1-21 15:11:27

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

愤怒的大鸟 发表于 2015-1-27 06:43:43

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

金色的骷髅 发表于 2015-1-28 12:06:12

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

再现理想 发表于 2015-2-5 14:37:39

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

老尸 发表于 2015-2-12 06:40:14

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

飘灵儿 发表于 2015-2-25 20:09:24

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

山那边是海 发表于 2015-3-7 19:31:10

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

深爱那片海 发表于 2015-3-15 05:02:50

是一种使网页(Web Page)产生生动活泼画面的语言

再见西城 发表于 2015-3-21 18:29:57

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

精灵巫婆 发表于 2015-3-26 19:54:56

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

若相依 发表于 2015-4-3 02:54:42

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

爱飞 发表于 2015-4-11 10:20:11

是一种将安全性(Security)列为第一优先考虑的语言

因胸联盟 发表于 2015-5-3 21:40:47

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

若天明 发表于 2015-5-5 19:18:48

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

兰色精灵 发表于 2015-5-6 15:09:43

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

小妖女 发表于 2015-5-6 22:54:12

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

莫相离 发表于 2015-5-7 14:20:14

是一种将安全性(Security)列为第一优先考虑的语言

冷月葬花魂 发表于 2015-6-4 20:53:37

Java 编程语言的风格十分接近C、C++语言。

谁可相欹 发表于 2015-6-6 12:16:30

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
页: [1]
查看完整版本: JAVA网页编程之一些无聊的代码之一:JAVA中的日期盘算...