新日期& Java 8中的Time API

时间:2013-07-08 13:08:09

标签: java datetime java-8 java-time

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来自。

2 个答案:

答案 0 :(得分:28)

使用Java< 8,你需要写一些类似的东西:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) + 2);

VS。使用Java 8:

LocalTime now = LocalTime.now();
LocalTime later = now.plus(2, HOURS);

改进基本上是

  • 可读性:
    • Calendar.getInstance()的命名不是很好:如果没有阅读Javadoc,很难告诉你正在获取哪个实例。 LocalTime.now()非常自我描述:你有时间,现在是
    • 要偏移日期,可以调用偏移方法(plus),而使用Calendar API,则必须手动更改容易出错的对象字段(在本例中为小时)。 / LI>
  • 易用性(例如,参见this page底部的表格进行比较):
    • Calendar API使用起来很复杂,因为它混合了概念,例如简单日期(2015年6月26日)和即时(2015年6月26日上午10点UTC) - 没有前一概念的类< / LI>
    • 新的Time API在the various date/time concepts
    • 之间有明确的分隔
  • 安全:
    • Calendar API不安全:没有什么可以阻止您编写cal.set(123, 2),这会导致一个不那么有帮助的ArrayOutOfBoundsException。新的API使用枚举来解决这个问题。
    • 新的API使用不可变对象,这使得线程安全。

总体而言,新API受到jodatime的启发,jodatime已经成为首选的Java Date API已有一段时间了。您还可以阅读this detailed comparison of Java (<1.8) date vs. JodaTime(其中大部分应该适用于Java 8 Date API)。

答案 1 :(得分:1)

新日期/时间API的优势

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

<强>缺点

  • JPA2尚未支持
  • JSF2尚未支持