网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > Java精品代码 > 正文

JAVADate4j:一个简约的日期处理类库

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
           Java本身的日期类在JDK1.0版本之后就再也没有更新过,同时还存在着一些众所周知的问题(例如1月从0开始,导致了很多月份差一的漏洞)。一份新的Java规范请求(JSR,Java Specification Request)已经被提交,目的就是要解决上述问题,此版本的类库仍处在Alpha版本。在其稳定之前,很多开发者还是会使用Joda Time类库,该类库与JSR-310的参考实现类似(但不完全相同)。

   Date4j为在Java中处理日期提供了一套新的解决方案,但与Joda Time所关注的范围完全不同。对比如下:

  

  虽然乍一看Date4j只具备了Joda中一部分的特性,但它有两个主要的特点是Joda所不具备的。

  首先,Date4j的开发者宣称类库不应莫名其妙地将日期截断。Joda只支持毫秒级的精度而且在将来可能也不会改善。一些数据库也已经有了更好的解决方案。比如流行的PostgreSQL数据库对时间戳精度就已经支持到微秒级(百万分之一秒)。Date4j可在处理日期时对精度毫无损伤。

  第二个特征是日期“溢出”的问题,例如向某个日期增加一段时间后,日期落在下月的情况。最简单的例子就是在3月31日增加一个月的计算:

DateTime dt = new DateTime("2011-03-31");
DateTime result
= dt.plusMonths(1);
System.out.println(result.toString());

   当使用Joda Time时,会输出4月30日,但这也许并不是你想要的结果。

  鉴于这种不确定性,Date4j为您提供了4种选择:

  

  以下通过举例的实例来说明,用Date4j替换Joda后的输出差异:

DateTime dt1 = new DateTime("2011-03-31");
DateTime result1
= dt1.plus(0,1,0,0,0,0,DayOverflow.FirstDay);
System.out.println(result1.toString());
//会输出 2011-05-01 (5月的第一天)
        
DateTime dt2
= new DateTime("2011-03-31");
DateTime result2
= dt2.plus(0,1,0,0,0,0,DayOverflow.LastDay);
System.out.println(result2.toString());
//会输出 2011-04-30(4月30日,与Joda输出结果相同)

DateTime dt3
= new DateTime("2011-03-31");
DateTime result3
= dt3.plus(0,1,0,0,0,0,DayOverflow.Abort);
System.out.println(result3.toString());
//抛出运行时异常(Runtime Exception)

   下面的代码展示了DayOverflow.Spillover中的选项:

//Joda Time代码
DateTime dt = new DateTime("2010-12-31");
DateTime result
= dt.plusMonths(2);
System.out.println(result.toString());
//输出2011-02-28(2月的最后一天)

//Date4j代码
DateTime dt1 = new DateTime("2010-12-31");
DateTime result1
= dt1.plus(0,2,0,0,0,0,DayOverflow.FirstDay);
System.out.println(result1.toString());
//输出 2011-03-01(3月的第一天)

//Date4j代码
DateTime dt2 = new DateTime("2010-12-31");
DateTime result2
= dt2.plus(0,2,0,0,0,0,DayOverflow.LastDay);
System.out.println(result2.toString());
//输出 2011-02-28 (2月28日,与Joda输出相同)

//Date4j代码
DateTime dt3= new DateTime("2010-12-31");
DateTime result3
= dt3.plus(0,2,0,0,0,0,DayOverflow.Spillover);
System.out.println(result3.toString());
//输出 2011-03-02(3月第二天)

   如果应用对精度要求较高并且在处理数据库日期时不想对精度有所损失,或者在处理跨月份日期时想有更灵活的方案供选择,Date4j会是一个不错的选择。现在,源代码已可直接下载。

  英文原文链接:Date4j - A Minimalistic Library for Handling Dates

TAG: JavaJAVAjava




点击下载系统:http://www.myeducs.cn/chaxun/index.html?go=JAVA Date4j:一个简约的日期处理类库&aa=%CB%D1%CB%F7%C2%DB%CE%C4
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师