Java 8中有这个新的非常酷的Date API java.time包。我明白这是 更好的设计,更少的模糊和更安全的线程 比旧班。不过,我不知道如何使用它:
- 我应该专门使用它而不是旧类吗?
- 我应该更换旧课程的现有用法,因为新的东西要好得多吗?
- 我应该不要使用
java.util.Calendar, java.util.Date
, java.sql.Date
和 java.text.DateFormat
一起赞成新的API或是否有用例 旧班级仍然可取的地方?
- 有 Joda Time API 由于新的Date API类似于替换而变得过时 番石榴FluentIterable 通过Java 8流API?
我知道这些是很多问题,但他们感觉彼此有些相关。如果有人可以回答整个问题,那将是非常棒的,但是也可以赞赏好的部分答案。
我应该专门使用它而不是旧类吗?
不,不需要排除旧班级。旧的java.util.Date/.Calendar工作原理相同,不变。有 不 已被弃用。
您可以混合和匹配所有三个框架(旧类,Joda-Time和java.time)。小心一些相同或相似的班级名称 - 注意你的 import
声明!
请参阅教程, 旧版日期时间码。
而且, ThreeTen-EXTRA project扩展了带有附加功能的java.time。 “ThreeTen”指的是 JSR 310 定义java.time。
我应该更换旧课程的现有用法,因为新的东西要好得多吗?
如果旧代码按预期工作,则无需立即更改。
如果您担心旧代码可能无法正确处理时区或者想要进行更多本地化,那么您可能希望使用java.time重新编写它们。即便如此,请记住,您可以轻松地在j.u.Date和Instant之间进行转换。因此,您可以将业务逻辑保留为j.u.Date/.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但不急,没有恐慌。