java.time与java 7之前的传统时间相关类
我在学习关于java.time的java.time与java 7之前的传统时间相关类,java,time,Java,Time,我在学习关于java.time的package。我不明白它的需要。 我的意思是以前在java.util和 java.text。 java.time与之有何不同 在Java8中,引入了一个新的日期时间API来涵盖以下内容 旧日期时间API的缺点− 不是线程安全的− java.util.Date不是线程安全的,因此开发人员 在使用date时必须处理并发问题。新的 日期时间API是不可变的,并且没有setter方法 糟糕的设计− 默认日期从1900开始,月份从1开始,和 一天从0开始,因此没有一致性
package。我不明白它的需要。
我的意思是以前在java.util
和
java.text
。
java.time
与之有何不同
在Java8中,引入了一个新的日期时间API来涵盖以下内容
旧日期时间API的缺点−
- 不是线程安全的− java.util.Date不是线程安全的,因此开发人员
在使用date时必须处理并发问题。新的
日期时间API是不可变的,并且没有setter方法
- 糟糕的设计− 默认日期从1900开始,月份从1开始,和
一天从0开始,因此没有一致性。旧的API没有那么直接
日期操作的方法。新的API提供了许多实用程序
用于此类操作的方法
- 时区处理困难− 开发人员必须编写大量代码
处理时区问题。新的API已经开发出来了
考虑特定领域的设计
Oracle定义了这些更改及其原因:
这一新API的核心思想:
新API由三个核心思想驱动:
- 不可变值类。Java中现有格式化程序的一个严重弱点是它们不是线程安全的。这给开发人员带来了负担,使他们无法以线程安全的方式使用它们,并且在日常开发日期处理代码时考虑并发问题。新的API通过确保其所有核心类都是不可变的并表示定义良好的值来避免这个问题
- 领域驱动设计。新的API非常精确地用类对其域进行建模,这些类表示日期和时间的不同用例。这与以前在这方面相当差的Java库不同。例如,java.util.Date表示时间轴上的一个瞬间,它是自UNIX纪元以来毫秒数的包装器,但如果调用toString(),结果表明它有一个时区,会引起开发人员的混淆
- 这种对域驱动设计的强调提供了关于清晰性和可理解性的长期好处,但是当从以前的API移植到JavaSE8时,您可能需要仔细考虑应用程序的域模型
- 年表的分离。新的API允许人们使用不同的日历系统,以支持世界上一些不一定遵循ISO-8601的地区(如日本或泰国)用户的需求。这样做不会给大多数开发人员带来额外的负担,他们只需要使用标准的时间顺序
你的问题是什么?你就要生火了;)-Java Time API致力于解决Date
和Calendar
的潜在缺陷,并围绕一系列标准统一API—如果您花时间使用原始API,您会发现新API(尽管它们一开始似乎令人望而生畏)更易于使用,功能更强大rich@Nathan不这与Java 8时间API的灵感来源Joda Time(或多或少)相比,关于Java.util.Date
中有一个解释,以及为什么不应该使用它。请注意,Calendar
更糟糕。你只是从教程网站上复制粘贴了这个?是的,我做了,并且也参考了同一个网站,因为他们已经以非常详细的方式解释了。@NeerajJain你也可以参考一下,最好得到真正的源代码。