java.util.Date 和 java.util.Calendar 是否已弃用?

Are java.util.Date and java.util.Calendar deprecated?

似乎新的 java.time API 提供了 java.util.Date 的一切,甚至更多。
当更新的 java.time API 自 Java 8 以来存在时,是否有任何理由使用 java.util.Date? 是否应该完全避免 java.util.Datejava.util.Calendar

简短回答: 新的 API java.time 比旧世界的 java.util.Datejava.util.Calendar 要好得多。所以是的,在新代码中应该首选新 API。

快速概览: 有一次我为各种日期时间库编写了 comparison of features in table form。几乎没有 java.time 缺失但存在于旧世界的特征:

  • 可配置gregorian/julian转换
  • 打印基于classFieldPosition(用于Swing组件FormattedTextField

关于弃用: 尽管自 Java 1.1 以来 java.util.Date 的大部分内容已被弃用,但 class 本身(以及 java.util.Calendar, too) 也没有被正式弃用,只是被宣布为事实上的遗产。旧 classes 的支持对于 向后兼容遗留代码 的目标仍然很重要。所以 Oracle 很可能在未来的任何时候都不会停止支持。但也许 Oracle 会应用更多 sophisticated deprecation strategies

未来的发展: 有趣的是,Java-8的发布不仅包含了全新的date/time-API(java.time ) 但也看到了 java.util.Calendar 的一些增强功能,例如 Calendar.Builder or SHORT_STANDALONE 等。好吧,我只能推测,但这似乎也表明 Oracle 不愿意停止对旧 [=51] 的支持=]在不久的将来。