class="p1">在java8中引入了新的日期和时间库,整合了很多Joda-Time的一些特性。
1)LocalDate + LocalTime + LocalDateTime
public void testLocalDate(){ LocalDate date = LocalDate.of(2016, 05, 22); println(date.getYear()); //2016 println(date.getMonth()); //MAY println(date.getMonthValue()); //5 println(date.getDayOfYear()); //143 println(date.getDayOfMonth()); //22 println(date.getDayOfWeek()); //SUNDAY println(date.lengthOfYear()); //366 println(date.lengthOfMonth()); //31 println(date.isLeapYear()); //true println(date.now()); //2016-05-22 println(date.toEpochDay()); //16943 LocalDate d = date.parse("2016-05-22"); //此处指允许使用ISO_LOCAL_DATE格式 println(d); } public void testLocalTime(){ LocalTime time = LocalTime.of(13, 04); println(time.getHour()); //13 println(time.getMinute()); //4 println(time.getSecond()); //0 println(time.getNano()); //0 time = LocalTime.parse("13:04:59"); //此处也只允许使用ISO_LOCAL_TIME格式 println(time); } public void testLocalDateTime(){ LocalDate date = LocalDate.of(2016, 05, 22); LocalTime time = LocalTime.of(13, 04); LocalDateTime ldt = LocalDateTime.of(date, time); }
?
2)Duration(持续时间) + Period(一段时间)
public void testDurationAndPeriod(){ println(Duration.ofDays(7)); // PT168H println(Duration.ofMinutes(7)); // PT7M println(Duration.of(7, ChronoUnit.DAYS)); // PT168H println(Period.ofDays(7)); // P7D println(Period.ofWeeks(7)); // P49D println(Period.of(1, 1, 7)); // P1Y1M7D }
还包含以下其他的方法:
between: 创建两个时间点之间的interval(间隔)。
from: 由一个临时时间点创建interval。
of: 由它的组成部分创建interval。
parse: 由字符串创建interval。
addTo: 创建该interval的副本,并将其叠加到某个指定的temporal对象。
get: 读取该interval的状态。
isNegative: 检查该interval是否为负值,不包含0。
isZero: 检查该interval的时长是否为0。
minus: 通过减去一定的时间创建该interval的副本。
multipliedBy: 将interval的值乘以某个标量创建该interval的副本。
negated: 以忽略某个时长的方式创建该interval的副本。
plus: 以增加某个指定时长的方式来创建该interval的副本。
subtractFrom: 以指定的temporal对象减去该interval。
?
?
3)LocalDate对象的相关操作
public void testLocalDateOperation(){ LocalDate date = LocalDate.of(2016, 05, 22); // 以绝对方式修改 date = date.withYear(2017); println(date); // 2017-05-22 date = date.withMonth(10); println(date); // 2017-10-22 date = date.withDayOfMonth(7); println(date); // 2017-10-07 // 以相对方式修改 date = date.plusYears(3); println(date); // 2020-10-07 date = date.minusMonths(9); println(date); // 2020-01-07 date = date.plusDays(6); println(date); // 2020-01-13 }
还可以使用java.time.temporal.TemporalAdjusters来进行操作:
dayOfWeekInMonth: 返回同一个月中第x周的第y天,x为负数,则表示相对当前天的上一周。
firstDayOfMonth: 返回当前月的第一天。
firstDayOfNextMonth: 返回下个月的第一天。
firstDayOfNextYear: 返回下年的第一天。
firstDayOfYear: 返回当年的第一天。
firstInMonth: 返回同一个月中,第一个符合指定星期数的日期。
lastDayOfMonth: 返回下个月的最后一天。
lastDayOfYear: 返回今年的最后一天。
lastInMonth: 返回同一个月中,最后一个符合指定星期数的日期。
next/previous: 返回当前日期向前或向后,第一个符合指定星期数的日期(不包含自己)。
nextOrSame/previousOrSame: 在上一条的基础上,把当前日期值(自己)也放进去计算。?
?
还有一些比如时区、历法这些的就不介绍了。