Java 8日期API与日历/日期/日期格式



在Java 8中有一个新的n- n-酷的日期API, Java。包的时间。我理解它是更好的设计,更少的歧义和线程安全的比旧类。但是,我不确定如何使用它:

  • 我应该专门使用它而不是旧的类吗?
  • 我是否应该在发现旧类的现有用法时替换它们,因为新东西要好得多?
  • 我是否应该避免使用java.util.Calendar, java.util.Date, java.sql.Datejava.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。时间不急不慌。

最新更新