随着Java 8最终版本的发布,令我兴奋的新功能之一就是新的Date API,这是JSR 310的工作成果。 尽管Lambda表达式无疑是Java 8的一大亮点,但是拥有更好的日期处理方式无疑是受欢迎的。 这是一篇简短的文章(第2部分或第3部分的第1部分),展示了新的Date功能的一些要点,这次主要围绕LocalDate类。
创建新的日期对象
创建代表特定日期的新Date对象很容易:
LocalDate today = LocalDate.parse("2014-02-27");
//or this method
LocalDate bday = LocalDate.of(2014,3,18);
添加到日期
作为我们在Java 8中轻松处理日期的简单示例,请考虑需要在现有日期中添加天,月或年的情况。 有方法LocalDate.plusDays
, LocalDate.plusWeeks
, LocalDate.plusMonths
LocalDate.plusYears
。 还有一个通用的LocalDate.plus
方法,您可以在其中通过TemporalUnit类型指定要添加的数量和时间单位。 这里有一些例子:
@Test
public void test_add_to_date() {
LocalDate oneMonthFromNow = today.plusDays(30);
assertTrue(oneMonthFromNow.isEqual(LocalDate.parse("2014-03-29")));
LocalDate nextMonth = today.plusMonths(1);
assertTrue(nextMonth.isEqual(LocalDate.parse("2014-03-27")));
LocalDate future = today.plus(4, ChronoUnit.WEEKS);
assertTrue(future.isEqual(LocalDate.parse("2014-03-27")));
}
减去日期
要从日期减去天,周,月或年,可以使用预期的方法: LocalDate.minusDays
, LocalDate.minusMonths
等。以下是从日期减去的一些示例:
@Test
public void test_subtract_from_date() {
assertThat(today.minusWeeks(1).toString(), is("2014-02-20"));
assertThat(today.minusMonths(2).toString(), is("2013-12-27"));
assertThat(today.minusYears(4).toString(), is("2010-02-27"));
Period twoMonths = Period.ofMonths(2);
assertThat(today.minus(twoMonths).toString(), is("2013-12-27"));
}
在此示例中,我们还介绍了Period对象。
确定日期之间的差异
可以争辩说,获取两个日期之间的差异是处理Java 8之前的日期最痛苦的操作。新的Date API使使用LocalDate.until
同样容易地确定日期之间的天数,周数,月数或年数。方法:
@Test
public void test_get_days_between_dates() {
LocalDate vacationStart = LocalDate.parse("2014-07-04");
Period timeUntilVacation = today.until(vacationStart);
assertThat(timeUntilVacation.getMonths(), is(4));
assertThat(timeUntilVacation.getDays(), is(7));
assertThat(today.until(vacationStart, ChronoUnit.DAYS), is(127L));
LocalDate libraryBookDue = LocalDate.parse("2000-03-18");
assertThat(today.until(libraryBookDue).isNegative(), is(true));
assertThat(today.until(libraryBookDue, ChronoUnit.DAYS), is(-5094L));
LocalDate christmas = LocalDate.parse("2014-12-25");
assertThat(today.until(christmas, ChronoUnit.DAYS), is(301L));
}
在此示例中,我们再次看到了Period
对象的使用。
结论
我们结束了对LocalDate
和Java 8 Date API的快速浏览。 显然,在Java 8中使用日期和时间还有很多发现,本文只是快速的介绍。 谢谢你的时间。
资源资源
- Joda Time Java日期时间库,用于Java版本<8
- java.time包包含本文中讨论的类的Java文档。
- Java 8中的函数式编程是使用Java 8中新功能组件的重要资源
- 这篇文章的源代码
翻译自: https://www.javacodegeeks.com/2014/03/whats-new-in-java-8-date-api.html