background image

JAVA Date4j:简约的日期处理类库

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 日,但这也许并不是你想要的结果。