仓酷云

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

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

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:47:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
先谈谈我对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[M]==0||ymd[M]>12){thrownewIllegalArgumentException("月份数值毛病");}if(true==isLeapYear(ymd[0])){if(ymd[D]==0||ymd[D]>DAYS_P_MONTH_LY[ymd[M]-1]){thrownewIllegalArgumentException("日期数值毛病");}}else{if(ymd[D]==0||ymd[D]>DAYS_P_MONTH_CY[ymd[M]-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-1]){month++;if(month>12){year++;month=1;}day=1;}}else{day++;if(day>DAYS_P_MONTH_CY[month-1]){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[Y],ymd[M],ymd[D]);}returnformatYear(ymd[Y])+formatMonthDay(ymd[M])+formatMonthDay(ymd[D]);}/***日期减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[month-1];}}else{day--;if(day<=0){month--;if(month<1){year--;month=12;}day=DAYS_P_MONTH_CY[month-1];}}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[Y],ymd[M],ymd[D]);}returnformatYear(ymd[Y])+formatMonthDay(ymd[M])+formatMonthDay(ymd[D]);}/***指定日期加上指定的天数的操纵*@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[Y])){ymd[D]+=days;if(ymd[D]>DAYS_P_MONTH_LY[ymd[M]-1]){ymd[M]++;ymd[D]=ymd[D]-DAYS_P_MONTH_LY[ymd[M]-1-1];if(ymd[M]>12){ymd[M]-=12;ymd[Y]++;}if(ymd[D]>DAYS_P_MONTH_LY[ymd[M]-1]){addDays(formatYear(ymd[Y])+formatMonthDay(ymd[M])+formatMonthDay(DAYS_P_MONTH_LY[ymd[M]-1]),ymd[D]-DAYS_P_MONTH_LY[ymd[M]-1]);}}}else{ymd[D]+=days;if(ymd[D]>DAYS_P_MONTH_CY[ymd[M]-1]){ymd[M]++;ymd[D]=ymd[D]-DAYS_P_MONTH_CY[ymd[M]-1-1];if(ymd[M]>12){ymd[M]-=12;ymd[Y]++;}if(ymd[D]>DAYS_P_MONTH_CY[ymd[M]-1]){addDays(formatYear(ymd[Y])+formatMonthDay(ymd[M])+formatMonthDay(DAYS_P_MONTH_CY[ymd[M]-1]),ymd[D]-DAYS_P_MONTH_CY[ymd[M]-1]);}}}returnformatYear(ymd[Y])+formatMonthDay(ymd[M])+formatMonthDay(ymd[D]);}/***指定日期减往指定的天数的操纵*@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[Y])){ymd[D]-=days;if(ymd[D]<=0){ymd[M]--;if(ymd[M]<1){ymd[M]+=12;ymd[Y]--;}ymd[D]=ymd[D]+DAYS_P_MONTH_LY[ymd[M]-1];if(ymd[D]<=0){reduceDays(formatYear(ymd[Y])+formatMonthDay(ymd[M])+formatMonthDay(1),abs(ymd[D]-1));}}}else{ymd[D]-=days;if(ymd[D]<=0){ymd[M]--;if(ymd[M]<1){ymd[M]+=12;ymd[Y]--;}ymd[D]=ymd[D]+DAYS_P_MONTH_CY[ymd[M]-1];if(ymd[D]<=0){reduceDays(formatYear(ymd[Y])+formatMonthDay(ymd[M])+formatMonthDay(1),abs(ymd[D]-1));}}}returnformatYear(ymd[Y])+formatMonthDay(ymd[M])+formatMonthDay(ymd[D]);}/***格局化一个日期字符串*@paramdate*@return*/publicstaticStringformatDate(Datedate){SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMdd");returnsdf.format(date);}/***将代表日期的字符串支解为代表年代日的整形数组*@paramdate*@return*/publicstaticint[]splitYMD(Stringdate){int[]ymd={0,0,0};ymd[Y]=Integer.parseInt(date.substring(0,4));ymd[M]=Integer.parseInt(date.substring(4,6));ymd[D]=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讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
再现理想 该用户已被删除
5#
发表于 2015-2-5 14:37:39 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
老尸 该用户已被删除
6#
发表于 2015-2-12 06:40:14 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
飘灵儿 该用户已被删除
7#
发表于 2015-2-25 20:09:24 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
山那边是海 该用户已被删除
8#
发表于 2015-3-7 19:31:10 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
深爱那片海 该用户已被删除
9#
发表于 2015-3-15 05:02:50 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
再见西城 该用户已被删除
10#
发表于 2015-3-21 18:29:57 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
精灵巫婆 该用户已被删除
11#
发表于 2015-3-26 19:54:56 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
若相依 该用户已被删除
12#
 楼主| 发表于 2015-4-3 02:54:42 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
爱飞 该用户已被删除
13#
发表于 2015-4-11 10:20:11 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
因胸联盟 该用户已被删除
14#
发表于 2015-5-3 21:40:47 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
若天明 该用户已被删除
15#
发表于 2015-5-5 19:18:48 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
兰色精灵 该用户已被删除
16#
发表于 2015-5-6 15:09:43 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
小妖女 该用户已被删除
17#
发表于 2015-5-6 22:54:12 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
莫相离 该用户已被删除
18#
发表于 2015-5-7 14:20:14 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
冷月葬花魂 该用户已被删除
19#
发表于 2015-6-4 20:53:37 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
谁可相欹 该用户已被删除
20#
发表于 2015-6-6 12:16:30 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 12:14

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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