繁体   English   中英

Java 8中的新日期和时间API

[英]New Date & Time API in Java 8

这个页面上我读了以下内容:

要使用日期进行计算,这也很容易。 与目前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()非常自我描述:你得到的时间就是现在
    • 要偏移日期,可以调用偏移方法( plus ),而使用Calendar API,您必须手动更改容易出错的对象字段(在此示例中为小时)。
  • 易于使用(例如,参见本页底部的表格进行比较):
    • Calendar API使用起来很复杂,因为它混合了概念,例如简单的日期(2015年6月26日)和即时(2015年6月26日上午10点UTC) - 没有前一个概念的类
    • 新的Time API 在各种日期/时间概念之间有明确的区分
  • 安全:
    • Calendar API不安全:没有什么能阻止你编写cal.set(123, 2) ,这会抛出一个不那么有用的ArrayOutOfBoundsException 新API使用枚举来解决该问题。
    • 新的API使用不可变对象,这使它的线程安全。

总体而言,新API受到jodatime的启发,jodatime已经成为首选的Java Date API已有一段时间了。 您还可以阅读Java(<1.8)日期与JodaTime的详细比较 (其中大部分应该适用于Java 8 Date API)。

新日期/时间API的优点

  • 日期(LocalDate),时间(LocalTime),日期和时间(LocalDateTime),即时(Instant)的概念更清晰,并且与它们在通用语言中的含义相对应。
  • 将日期/时间初始化为特定值变得更容易(方法'of',例如LocalDate.of(2016,1,1))
  • 处理闰年(方法是LeapYear)变得微不足道
  • 添加/减去日期变得非常容易。 例如,今天要参考10年:LocalDate.now()。plusYears(10)
  • 月份编号偏移适应直觉。 'January'现在是'1'而不是之前的'0'

缺点

  • JPA2尚不支持
  • JSF2尚不支持

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM