在Java 8中有一个新的n- n-酷的日期API, Java。包的时间。我理解它是更好的设计,更少的歧义和线程安全的比旧类。但是,我不确定如何使用它:
- 我应该专门使用它而不是旧的类吗?
- 我是否应该在发现旧类的现有用法时替换它们,因为新东西要好得多?
- 我是否应该避免使用
java.util.Calendar, java.util.Date
,java.sql.Date
和java.text.DateFormat
来支持新的API,或者有用例,其中旧类仍然优选? - 由于新的Date API类似于Java 8流API替代Guava FluentIterable, Joda Time API是否已经过时?
我知道这些问题很多,但它们感觉彼此之间有些联系。如果有人能回答全部问题,那就太棒了,但好的部分答案也很受欢迎。
我应该专门使用它而不是旧的类吗?
不,不需要排除旧的类。旧的java.util.Date/。日历工作一样,不变。不已弃用。
您可以混合和匹配这三种框架(旧类、Joda-Time和java.time)。只是要小心一些相同或相似的类名——注意您的import
语句!
参见教程,遗留日期-时间代码。
同样,ThreeTen-Extra项目扩展了java。时间与其他功能。"three - ten"指的是定义java.time的JSR 310。
我是否应该在发现旧类的现有用法时替换它们,因为新东西好得多?
如果旧代码按预期工作,那么现在不需要更改。
如果您担心旧代码可能无法正确处理时区,或者一直想要进行更多的本地化,那么您可能需要使用java.time进行重做。即便如此,请记住您可以轻松地在j.u.d date和Instant之间进行转换。因此,您可以将业务逻辑保留在j.u.Date/中。日历和仅更改用户表示代码以使用java.time。
我应该避免使用java.util。日历,java.util。Date、java.sql.Date和java.text.DateFormat一起支持新API还是旧类仍然更可取?
您将需要旧类来与旧代码和期望旧类型的库进行互操作。同样,旧的类不会被弃用,也不会消失。考虑到它们的广泛使用和Java团队的首要任务是保持向后兼容性,它们可能永远不会消失。
新的java。时间类比优越得多,这就是添加它们的原因。而且它们更有逻辑性,更容易使用。所以,是的,学习如何使用它们将是有益的和愉快的。但并不紧急。在紧要关头,用你习惯的老方法写代码。当您有时间学习(教程)并进行额外的测试时,请开始使用新课程。
程序员新手当然应该把学习重点放在java.time上。
由于新的Date API类似于Java 8流API替代Guava FluentIterable, Joda Time API是否已经过时?
Joda-Time是java.time的灵感来源。两者都是同一个人发明的。他们打算用java。时间是他们对Joda-Time的"2.0"重新发明,如果他们知道他们现在所知道的,他们会做什么。他们说java - time用户应该转换到java.time.
也就是说,时间不会消失。它仍然在工作,仍然更新了错误修复和新的tz
时区数据。对于没有其他像样的日期时间库(据我所知)的大型Android社区来说,它非常重要。因此,您可以继续依赖于jdbc - time,不需要迫切地删除旧代码,但也不需要期待新的特性或增强。
Joda-Time是久经考验的java。时间有一些小的错误和扭结需要解决。时间和java。时间都有对方所缺乏的特点。所以就我个人而言,我喜欢混搭。我在涉水java.time时依赖于jdbc - time。
计划最终过渡到java。时间不急不慌。