Java 8 Date API vs Calendar/Date/DateFormat

Fri*_*rdt 14 calendar date jodatime java-8 java-time

Java 8中有一个新的n-cool Date API,即java.time包.我知道它比旧类更好的设计,更少的模糊和更多的线程安全.不过,我不知道如何使用它:

  • 我应该专门使用它而不是旧类吗?
  • 我应该更换旧课程的现有用法,因为新的东西要好得多吗?
  • 我应该避免使用java.util.Calendar, java.util.Date,java.sql.Datejava.text.DateFormat支持新的API一起还是有使用的情况下,其中的老班还是最好
  • 由于新的Date API类似于使用Java 8流API 替换Guava FluentIterable,Joda Time API是否已经过时了?

我知道这些都是很多问题,但他们感觉彼此有些相关.如果有人可以回答整个问题,那将是非常棒的,但也可以赞赏好的部分答案.

Bas*_*que 19

我应该专门使用它而不是旧类吗?

不,不需要排除旧班级.旧的java.util.Date/.Calendar工作原理相同,不变.本已被弃用.

您可以混合和匹配所有三个框架(旧类,Joda-Time和java.time).小心一些相同或相似的类名 - 注意你的import陈述!

请参阅教程,旧版日期时间代码.

此外,ThreeTen-Extra项目还扩展了具有附加功能的java.time."ThreeTen"指的是定义java.time的JSR 310.

我应该更换旧课程的现有用法,因为新的东西要好得多吗?

如果旧代码按预期工作,则无需立即更改.

如果您担心旧代码可能无法正确处理时区或者想要进行更多本地化,那么您可能希望使用java.time重新编写它们.即便如此,请记住,您可以轻松地在juDate和Instant之间进行转换.因此,您可以将业务逻辑保留为juDate/.Calendar,并仅更改用户表示代码以使用java.time.

我应该避免使用java.util.Calendar,java.util.Date,java.sql.Date和java.text.DateFormat来支持新的API,还是有旧的类仍然更可取的用例?

您将需要旧类与旧代码和期望旧类型的库进行互操作.同样,旧类不会被弃用,也不会消失.鉴于它们的广泛使用,它们可能永远不会消失,Java团队的首要任务是保持向后兼容性.

新的java.time类非常优越,这就是它们被添加的原因.它们更合乎逻辑,更易于使用.所以,是的,学习如何使用它们将是有益和愉快的.但并不紧急.在紧张的情况下,用您习惯的旧方式编写代码.当您有足够的时间学习(教程)并执行额外的测试时,请开始使用新课程.

一个新手程序员当然应该把他们的学习重点放在java.time上.

由于新的Date API类似于使用Java 8流API替换Guava FluentIterable,Joda Time API是否已经过时了?

Joda-Time是java.time的灵感来源.同样的人发明了两者.他们打算让java.time成为他们对Joda-Time的"2.0"重新发明,如果他们知道他们现在知道什么,他们会做什么.他们说Joda-Time用户应该转换到java.time.

也就是说,Joda-Time并没有消失.它仍在使用,仍然更新了错误修复和新的tz时区数据.对于没有其他不错的日期时间库(我知道)的大型Android社区来说,这一点非常重要.因此,您可以继续依赖Joda-Time,不需要删除旧代码,但期望没有新功能或增强功能.

Joda-Time已经很好用并且经过验证,而java.time有一些小错误和纠结.Joda-Time和java.time都有其他缺少的功能.所以个人而言,我混搭最合适.我在使用java.time时依赖Joda-Time.

计划最终转换到java.time但不急,没有恐慌.