跳到主要内容

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 条款许可代码