一、简介
从 Java 1.0 开始,就提供了对日期与时间处理的 java.util.Date 类,它允许把日期解释为年、月、日、小时、分钟和秒值,也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。在升级版本到 Java 1.1 前,Java 维护者认为 Date 类很难被重新构造,由于这个原因,Java 1.1 增加了一个新的 java.util.Calendar 类。Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。可是在开发者使用过程中感受到,Calendar 类并不比 Date 类好用,它们面临的部分问题是:
- 可变性:像时间和日期这样的类应该是不可变的。
- 偏移性:Date 中的年份是从 1900 开始的,而月份是从 0 开始的,不太符合常识习惯。
- 类命名:Date 并不表示处理”日期”,而”Calendar”类也不全是表示”日历”,类命名比较不合理。
- 格式化:时间日期格式化只对 Date 有用,Calendar 则不行,且时间格式化对象存在线程安全问题。
自 2001 年起 Joda-Time 项目发布,它提供了简单易用且线程安全的时间类库,很快在 Java 社区中流行并广泛使用。Java 维护人员考虑到 JDK 中也需要一个这样的库,于是就与巴西的 Michael Nascimento Santos 合作,Java 官方 JDK 新增了的时间/日期 API的进程(JSR-310)。