当你开始利用Java操纵日期和时间的时候,会有一些棘手。你也许会通过System.currentTimeMillis() 来返回1970年1月1日到本日的毫秒数。可能利用Date类来操纵日期;当碰着加减月份、天数的时候 你又需要用到Calendar类;当需要名目化日期的时候需要利用java.text.DateFormat类。 总而言之在Java中操纵日期不是很利便,以至于许多开拓者不得不利用第三方库,好比: joda-time。
现有API存在的问题
亏得JSR 310类型中为Java8添加了新的API, 在java.time包中,新的API更正了已往的缺陷,
新的日期API
最常用的就是LocalDate、LocalTime、LocalDateTime了,软件开发,从它们的名字就可以看出是操纵日期 和时间的。这些类是主要用于其时区不需要显式地指定的上下文。在本章节中我们将接头最常用的api。
LocalDate
LocalDate代表一个IOS名目(yyyy-MM-dd)的日期,可以存储 生日、眷念日等日期。 获取当前的日期:
LocalDate localDate = LocalDate.now(); System.out.println("localDate: " + localDate);
localDate: 2017-07-20
LocalDate可以指定特定的日期,挪用of或parse要领返回该实例:
LocalDate.of(2017, 07, 20); LocalDate.parse("2017-07-20");
虽然它尚有一些其他要领,我们一起来看看:
为本日添加一天,也就是获取来日诰日
LocalDate tomorrow = LocalDate.now().plusDays(1);
从本日减去一个月
LocalDate prevMonth = LocalDate.now().minus(1, ChronoUnit.MONTHS);
下面写两个例子,别离理会日期 2017-07-20,获取每周中的礼拜和每月中的日:
DayOfWeek thursday = LocalDate.parse("2017-07-20").getDayOfWeek(); System.out.println("周四: " + thursday); int twenty = LocalDate.parse("2017-07-20").getDayOfMonth(); System.out.println("twenty: " + twenty);
试试本年是不是闰年:
boolean leapYear = LocalDate.now().isLeapYear(); System.out.println("是否闰年: " + leapYear);
判定是否在日期之前或之后:
boolean notBefore = LocalDate.parse("2017-07-20") .isBefore(LocalDate.parse("2017-07-22")); System.out.println("notBefore: " + notBefore); boolean isAfter = LocalDate.parse("2017-07-20").isAfter(LocalDate.parse("2017-07-22")); System.out.println("isAfter: " + isAfter);
获取这个月的第一天:
LocalDate firstDayOfMonth = LocalDate.parse("2017-07-20") .with(TemporalAdjusters.firstDayOfMonth()); System.out.println("这个月的第一天: " + firstDayOfMonth); firstDayOfMonth = firstDayOfMonth.withDayOfMonth(1); System.out.println("这个月的第一天: " + firstDayOfMonth);
判定本日是否是我的生日,譬喻我的生日是 2009-07-20
LocalDate birthday = LocalDate.of(2009, 07, 20); MonthDay birthdayMd = MonthDay.of(birthday.getMonth(), birthday.getDayOfMonth()); MonthDay today = MonthDay.from(LocalDate.now()); System.out.println("本日是否是我的生日: " + today.equals(birthdayMd));
LocalTime
LocalTime暗示一个时间,而不是日期,下面先容一下它的利用要领。
获取此刻的时间,输出15:01:22.144
LocalTime now = LocalTime.now(); System.out.println("此刻的时间: " + now);
将一个字符串时间理会为LocalTime,输出15:02
LocalTime nowTime = LocalTime.parse("15:02"); System.out.println("时间是: " + nowTime);
利用静态要领of建设一个时间
LocalTime nowTime = LocalTime.of(15, 02); System.out.println("时间是: " + nowTime);