|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
比如模式、敏捷方法什么的,这些思想好,但是实施的人没有理解而且没有正确运用这些知识导致了开发周期的延长。比如说对象,通过getName()方法不能获取对象的名字。Java自己的日期类在JDK1.0版本以后就再也没有更新过,同时还存在着一些尽人皆知的成绩(比方1月从0入手下手,招致了良多月份差一的毛病)。一份新的Java标准哀求(JSR,JavaSpecificationRequest)已被提交,目标就是要办理上述成绩,此版本的类库仍处在Alpha版本。在其不乱之前,良多开辟者仍是会利用JodaTime类库,该类库与JSR-310的参考完成相似(但不完整不异)。
Date4j为在Java中处置日期供应了一套新的办理计划,但与JodaTime所存眷的局限完整分歧。对照以下:
JodaTimeDate4j具有的类的数目:140+具有的类的数目<10包括可变和不成变类仅包括不成变类夸大速率和功效夸大复杂和无效撑持格里高里历(Gregorian)、科普特语日历(Coptic)、伊斯兰教历(Islamic)、佛历(Buddhist)等等只供应对格里高里历的撑持能够完整代替JDK日期类和JDK日期类共同利用准确到毫秒级操纵撑持到纳秒(十亿分之一秒)级操纵修复了天“溢出”的成绩天“溢出”的成绩可设置针对的是一般意义的日期保护合用于经由过程数据库来保护的日期接纳Apache2.0受权允许接纳BSD受权允许
固然乍一看Date4j只具有了Joda中一部分的特征,但它有两个次要的特性是Joda所不具有的。
起首,Date4j的开辟者传播鼓吹类库不该稀里糊涂地将日期截断。Joda只撑持毫秒级的精度并且在未来大概也不会改良。一些数据库也已有了更好的办理计划。好比盛行的PostgreSQL数据库对工夫戳精度就已撑持到微秒级(百万分之一秒)。Date4j可在处置日期时对精度毫无毁伤。
第二个特性是日期“溢出”的成绩,比方向某个日期增添一段工夫后,日期落鄙人月的情形。最复杂的例子就是在3月31日增添一个月的盘算:- DateTimedt=newDateTime("2011-03-31");DateTimeresult=dt.plusMonths(1);System.out.println(result.toString());
复制代码 当利用JodaTime时,会输入4月30日,但这大概并非你想要的了局。
鉴于这类不断定性,Date4j为您供应了4种选择:
1.第一天2.最初一天(与JodaTime不异)3.日期顺延4.抛出非常
以下经由过程举例的实例来讲明,用Date4j交换Joda后的输入差别:- DateTimedt1=newDateTime("2011-03-31");DateTimeresult1=dt1.plus(0,1,0,0,0,0,DayOverflow.FirstDay);System.out.println(result1.toString());//会输入2011-05-01(5月的第一天)DateTimedt2=newDateTime("2011-03-31");DateTimeresult2=dt2.plus(0,1,0,0,0,0,DayOverflow.LastDay);System.out.println(result2.toString());//会输入2011-04-30(4月30日,与Joda输入了局不异)DateTimedt3=newDateTime("2011-03-31");DateTimeresult3=dt3.plus(0,1,0,0,0,0,DayOverflow.Abort);System.out.println(result3.toString());//抛出运转时非常(RuntimeException)
复制代码 上面的代码展现了DayOverflow.Spillover中的选项:- //JodaTime代码DateTimedt=newDateTime("2010-12-31");DateTimeresult=dt.plusMonths(2);System.out.println(result.toString());//输入2011-02-28(2月的最初一天)//Date4j代码DateTimedt1=newDateTime("2010-12-31");DateTimeresult1=dt1.plus(0,2,0,0,0,0,DayOverflow.FirstDay);System.out.println(result1.toString());//输入2011-03-01(3月的第一天)//Date4j代码DateTimedt2=newDateTime("2010-12-31");DateTimeresult2=dt2.plus(0,2,0,0,0,0,DayOverflow.LastDay);System.out.println(result2.toString());//输入2011-02-28(2月28日,与Joda输入不异)//Date4j代码DateTimedt3=newDateTime("2010-12-31");DateTimeresult3=dt3.plus(0,2,0,0,0,0,DayOverflow.Spillover);System.out.println(result3.toString());//输入2011-03-02(3月第二天)
复制代码 假如使用对精度请求较高而且在处置数据库日期时不想对精度有所丧失,大概在处置跨月份日期时想有更天真的计划供选择,Date4j会是一个不错的选择。如今,源代码已可间接下载。
检察英文原文:Date4j-AMinimalisticLibraryforHandlingDates
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。 |
|