关于 this我阅读了以下页面:
用日期做计算,也很容易。与 Java < 1.8 的当前情况相比,可能是最好的改进:
Period p = Period.of(2, HOURS);
LocalTime time = LocalTime.now();
LocalTime newTime = time.plus(p); // or time.plus(5, HOURS); or time.plusHours(5);
我没有清楚地看到 < 1.8 版本之前的优势。
也许有人可以给我举个例子? Atm 我在问自己,新的日期和时间 API 的改进从何而来。
最佳答案
对于 Java < 8,您需要编写如下内容:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) + 2);
对比使用 Java 8:
LocalTime now = LocalTime.now();
LocalTime later = now.plus(2, HOURS);
改进基本上是在
- 可读性:
Calendar.getInstance()
的命名不是很好:如果不阅读 Javadoc, 很难知道您获得的是哪个实例。LocalTime.now()
非常 self 描述:您得到一个时间,它是现在。- 要偏移日期,您可以调用偏移方法 (
plus
),而使用日历 API,您必须手动更改对象的字段(在本例中为小时),这是错误的俯卧。
- 易用性(例如,参见 this page 底部的表格进行比较):
- Calendar API 使用起来很复杂,因为它混合了概念,例如简单日期(2015 年 6 月 26 日)和即时时间(UTC 时间 2015 年 6 月 26 日上午 10 点)——前一个概念没有类
- 新的时间 API 在 the various date/time concepts 之间有明确的区分
- 安全:
- Calendar API 并不安全:没有什么能阻止您编写
cal.set(123, 2)
,这会抛出一个不太有用的ArrayOutOfBoundsException
。新的 API 使用枚举解决了这个问题。 - 新 API 使用不可变对象(immutable对象),这使其成为线程安全的。
- Calendar API 并不安全:没有什么能阻止您编写
总的来说,新的 API 很大程度上受到了 jodatime 的启发,jodatime 在很长一段时间内一直是首选的 Java Date API。您还可以阅读 this detailed comparison of Java (<1.8) date vs. JodaTime (其中大部分应该适用于 Java 8 Date API)。
关于java - Java 8 中新的日期和时间 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17527468/