`
xpenxpen
  • 浏览: 703317 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

joda-time/date4j/jsr310介绍

阅读更多
本文介绍java里面的日期时间处理工具。首先介绍JDK自带的API和缺点,然后介绍joda-time,date4j,jsr310(JDK8)新的API。

1. JDK自带的类
日期
  • java.util.Date
  • java.sql.Date
  • java.sql.Timestamp


日历,时区
  • java.util.Calendar
  • java.util.GregorianCalendar
  • java.util.TimeZone
  • java.util.SimpleTimeZone


格式化,解析
  • java.text.DateFormat
  • java.text.SimpleDateFormat
  • java.text.DateFormatSymbols


JDK的缺点
  • 时区操作容易出错
  • Date被设计成了mutable
  • Calendar的设计太复杂。(JDK6中Calendar将近2700多行代码,GregorianCalendar将近3000行代码)
  • January要设置成0月,年要减去1900
  • 计算2天之间差几天不简便
  • Timestamp继承自Date,使得equals和hashCode方法的实现比较困难
  • Calendar如果要设置hour,有2个域, HOUR和HOUR_OF_DAY都得设置
  • 时区和夏令时会受新立法的影响,年年会变,导致JRE要不停的更新
  • SimpleDateFormat不是线程安全的


2. joda-time
本文写作时版本2.3。
joda-time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.3</version>
</dependency>


在springside4里,Showcase中的JodaDemo演示了如何使用joda-time。

joda-time优点
  • 易于使用,有getYear()等方法直接访问域,索引值1就是代表January
  • 易于扩展,JDK的日历系统是通过Calendar的子类来实现,非常笨重而且事实上要实现其它日历系统是很困难的。joda-time支持多日历系统是通过基于Chronology类的插件体系来实现
  • 提供一组完整的功能,日期时间的计算。
  • 保持更新的时区计算,基于公共的tz数据库,每年更新几次。
  • 当前支持8种日历系统
  • 简单的互操作性,内部使用毫秒作为存储,这个JDK是一致的,而且和JDK API兼容。
  • 性能更好。
  • 测试覆盖率高,质量好。
  • 文档,指南齐全。
  • 成熟,始于2002年。
  • 开源,Apache License


joda-time缺点
  • 精度为毫秒,但是timestamp一般要精确到微妙,纳秒
  • 类还是mutable的
  • 庞大,有138个类
  • 还是时区问题,要跟着数据库每年更新
  • 安卓上运行慢
  • 有些数据库(MySQL)允许不合法的日期'0000-00-00',joda-time处理不了


3.date4j
date4j是一个用于简化日期和时间操作的Java工具,可以替换JDK Date
本文写作时版本1.5.1。
<dependency>
    <groupId>com.darwinsys</groupId>
    <artifactId>hirondelle-date4j</artifactId>
    <version>1.5.1</version>
</dependency>


date4j优点
  • 只有1个public类,DateTime,是immutable的
  • 精确到纳秒
  • 支持MySQL的不合法日期'0000-00-00'


date4j缺点
  • 没有时区信息
  • 忽略夏令时,闰秒,尤利乌斯历到格利高里历的切换


4.jsr310
已经被打入了JDK8的包里。
目标:替换java.util.Date和java.util.Calendar
JSR 310规范领导者和joda-time是同一个作者,借鉴了joda-time,但做了改进。

主要API如下
  • Clock,时钟,类似于钟表的概念,提供了如系统时钟、固定时钟、特定时区的时钟
  • Instant,瞬时时间,等价于以前的System.currentTimeMillis()
  • LocalDateTime/LocalDate/LocalTime,提供了对JDK Date的替代,另外还提供了新的DateTimeFormatter用于对格式化/解析的支持
  • ZonedDateTime,带有时区的date-time 存储纳秒、时区和时差
  • Duration,表示两个瞬时时间的时间段
  • Chronology,用于对年历系统的支持,是java.util.Calendar的替代者
  • Period,周期,如表示10天前,3年5个月 


5.参考资料
Joda-Time 简介
Spring4新特性——JSR310日期时间API的支持
springside关于joda-time的wiki
分享到:
评论

相关推荐

    joda-time-2.8.1-API文档-中文版.zip

    赠送jar包:joda-time-2.8.1.jar 赠送原API文档:joda-time-2.8.1-javadoc.jar 赠送源代码:joda-time-2.8.1-sources.jar 包含翻译后的API文档:joda-time-2.8.1-javadoc-API文档-中文(简体)版.zip 对应Maven信息...

    joda-time-2.10.8-API文档-中文版.zip

    赠送jar包:joda-time-2.10.8.jar; 赠送原API文档:joda-time-2.10.8-javadoc.jar; 赠送源代码:joda-time-2.10.8-sources.jar; 赠送Maven依赖信息文件:joda-time-2.10.8.pom; 包含翻译后的API文档:joda-time-...

    joda-time-2.1.jar

    joda-time-2.1.jar

    joda-time-2.9.5-API文档-中文版.zip

    赠送jar包:joda-time-2.9.5.jar; 赠送原API文档:joda-time-2.9.5-javadoc.jar; 赠送源代码:joda-time-2.9.5-sources.jar; 赠送Maven依赖信息文件:joda-time-2.9.5.pom; 包含翻译后的API文档:joda-time-...

    joda-time-2.5-API文档-中文版.zip

    赠送jar包:joda-time-2.5.jar; 赠送原API文档:joda-time-2.5-javadoc.jar; 赠送源代码:joda-time-2.5-sources.jar; 赠送Maven依赖信息文件:joda-time-2.5.pom; 包含翻译后的API文档:joda-time-2.5-javadoc-...

    joda-time-2.10.4-API文档-中文版.zip

    赠送jar包:joda-time-2.10.4.jar; 赠送原API文档:joda-time-2.10.4-javadoc.jar; 赠送源代码:joda-time-2.10.4-sources.jar; 赠送Maven依赖信息文件:joda-time-2.10.4.pom; 包含翻译后的API文档:joda-time-...

    joda-time-2.2-API文档-中英对照版.zip

    赠送jar包:joda-time-2.2.jar; 赠送原API文档:joda-time-2.2-javadoc.jar; 赠送源代码:joda-time-2.2-sources.jar; 赠送Maven依赖信息文件:joda-time-2.2.pom; 包含翻译后的API文档:joda-time-2.2-javadoc-...

    joda-time-2.9.9-API文档-中英对照版.zip

    赠送jar包:joda-time-2.9.9.jar; 赠送原API文档:joda-time-2.9.9-javadoc.jar; 赠送源代码:joda-time-2.9.9-sources.jar; 赠送Maven依赖信息文件:joda-time-2.9.9.pom; 包含翻译后的API文档:joda-time-...

    joda-time-2.9.9

    joda-time-2.9.9时间日期转换工具类,简单易用,功能强大!

    joda-time-2.3

    Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。 Joda-Time主要的特点包括: 1. 易于使用:Calendar让获取...

    joda-time2.10.1

    于是就诞生了Joda-Time这个专门处理日期时间的库。(JDK1.8的API已经重写了日期库,引入的java.time包,其实也是借鉴了Joda-Time) --------------------- 作者:--nodeps 来源:CSDN 原文:...

    joda-time-2.8.1-API文档-中英对照版.zip

    赠送jar包:joda-time-2.8.1.jar; 赠送原API文档:joda-time-2.8.1-javadoc.jar; 赠送源代码:joda-time-2.8.1-sources.jar; 赠送Maven依赖信息文件:joda-time-2.8.1.pom; 包含翻译后的API文档:joda-time-...

    joda-time-1.6-src.zip

    Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。 Joda-Time主要的特点包括: 1. 易于使用:Calendar让获取"正常...

    joda-time-2.5.zip

    joda-time-2.5.jar包

    joda-time-2.8.2.jar

    joda-time-2.8.2.jar

    joda-time-2.6-API文档-中文版.zip

    赠送jar包:joda-time-2.6.jar; 赠送原API文档:joda-time-2.6-javadoc.jar; 赠送源代码:joda-time-2.6-sources.jar; 赠送Maven依赖信息文件:joda-time-2.6.pom; 包含翻译后的API文档:joda-time-2.6-javadoc-...

    joda-time-2.2-API文档-中文版.zip

    赠送jar包:joda-time-2.2.jar; 赠送原API文档:joda-time-2.2-javadoc.jar; 赠送源代码:joda-time-2.2-sources.jar; 赠送Maven依赖信息文件:joda-time-2.2.pom; 包含翻译后的API文档:joda-time-2.2-javadoc-...

Global site tag (gtag.js) - Google Analytics