JEP 150:日期和时间 API
概括
为 Java SE 平台定义新的日期、时间和日历 API。
目标
- 支持标准时间概念,包括日期、时间、即时和时区
- 不可变的实现
- 提供适合JDK的有效API,注重开发人员可用性
- 与现有 JDK API 集成
- 提供一组有限的日历系统并可扩展到其他系统
- 使用相关标准,包括 ISO-8601、CLDR 和 BCP47
- 基于与 UTC 连接的明确时间尺度
非目标
解决所有日期/时间问题并不是目标,但新的 API 应该成为外部扩展的合适基础。
动机
现有的 Java 日期和时间类质量较差、可变且性能不可预测。长期以来,人们一直渴望有一个基于 Joda-Time 项目的更好的日期和时间 API。新的 API 将具有更直观的设计,允许代码更好地表达其意图。这些类也将是不可变的,这与行业的多核方向保持一致。
描述
JSR 310 EG一直致力于为 Java 平台开发新的日期/时间 API。该项目的目标是将JSR 310 参考实现集成到 JDK 8 中。
集成将涉及成功地使用任何新的模块系统。可能需要为核心嵌入式和移动模块提供功能子集。
该项目还要求 JSR 310 类与现有类集成。例如,JDK 中应该只有一个时区数据源。现有的格式化程序也将支持新的类。
测试
除了正常的单元/回归测试开发之外,没有任何具体要求。 JSR 310已经开发了一个大型测试套件,分为TCK和非TCK测试。
风险和假设
该项目主要由非 Oracle 人员实施,他们没有资金全职从事该项目。
对不变性和线程安全性的审查是必要的并且是假设的。
依赖关系
-
目前对 Lambda 项目没有依赖关系,但在集成过程中可能会发生变化。
-
整个JDK的模块系统设计将会影响JSR 310的设计。
影响
-
其他 JDK 组件:应审查其他 API,看看它们是否可以利用 JSR 310 类
-
兼容性:现有类的新代码和一些新方法
-
安全性:没有预期的
-
I18n/L10n:可能需要额外的 i18n 框架才能更好地支持非公历
-
可移植性:基本工作不需要额外的本机代码,但是需要更精确的系统时钟
-
文档:标准 javadoc 和示例,可能更新教程/指南
-
TCK:新的 JCK 测试开发
-
法律:集成来自 JSR 310 的 BSD 3 条款许可代码