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 测试。
风险与假设
该项目主要由非甲骨文员工实施,他们并未获得资助以全职从事该项目。
有必要并且假定对不可变性和线程安全性的回顾。
依赖
- 当前在 Project Lambda 上没有任何依赖项,但在集成过程中可能会发生变化。
- 整个 JDK 的模块系统设计将影响 JSR 310 的设计。
影响
- 其他 JDK 组件:应审查其他 API,看看它们是否可以利用 JSR 310 类
- 兼容性:新代码和现有类上的一些新方法
- 安全性:预计无
- 国际化/本地化:可能需要额外的国际化框架,以更好地支持非公历日历
- 可移植性:基础工作不需要额外的原生代码,但更精确的系统时钟是可取的
- 文档:标准的 javadoc 和示例,可能需要更新教程/指南
- TCK:新的 JCK 测试开发
- 法务:集成来自 JSR 310 的 BSD 3 条款许可代码