JDK 1.8 完整日期时间Api (文末附示例) (2)

Instant用于一个获取时间戳,与System.currentTimeMillis()类似,但Instant可以精确到纳秒。

public class InstantDemo { public static void main(String[] args) { // 创建Instant对象 Instant instant = Instant.now(); // 通过ofEpochSecond方法创建(第一个参数表示秒,第二个参数表示纳秒) Instant another = Instant.ofEpochSecond(365 * 24 * 60, 100); // 获取到秒数 long currentSecond = instant.getEpochSecond(); System.out.println("获取到秒数:" + currentSecond); // 获取到毫秒数 long currentMilli = instant.toEpochMilli(); System.out.println("获取到毫秒数:" + currentMilli); } } 2.5 Duration

Duration的内部实现与Instant类似,但Duration表示时间段,通过between方法创建,还可以通过of()方法创建。

public static void duration() { LocalDateTime from = LocalDateTime.now(); LocalDateTime to = LocalDateTime.now().plusDays(1); // 通过between()方法创建 Duration duration = Duration.between(from, to); // 通过of()方法创建,该方法参数为时间段长度和时间单位。 // 7天 Duration duration1 = Duration.of(7, ChronoUnit.DAYS); // 60秒 Duration duration2 = Duration.of(60, ChronoUnit.SECONDS); } 2.5 Period

Period与Duration类似,获取一个时间段,只不过单位为年月日,也可以通过of方法和between方法创建,between方法接收的参数为LocalDate。

private static void period() { // 通过of方法 Period period = Period.of(2012, 12, 24); // 通过between方法 Period period1 = Period.between(LocalDate.now(), LocalDate.of(2020,12,31)); } 三、时间操作 3.1 时间比较

isBefore()和isAfter()判断给定的时间或日期是在另一个时间/日期之前还是之后。
以LocalDate为例,LocalDateTime/LocalTime同理。

public static void compare() { LocalDate thisDay = LocalDate.of(2008, 8, 8); LocalDate otherDay = LocalDate.of(2018, 8, 8); // 晚于 boolean isAfter = thisDay.isAfter(otherDay); System.out.println(isAfter); // 早于 boolean isBefore = thisDay.isBefore(otherDay); System.out.println(isBefore); } 3.2 增加/减少年数、月数、天数

以LocalDateTime为例,LocalDate/LocalTime同理。

public static void plusAndMinus() { // 增加 LocalDateTime today = LocalDateTime.now(); LocalDateTime nextYearDay = today.plusYears(1); System.out.println("下一年的今天是:" + nextYearDay); LocalDateTime nextMonthDay = today.plus(1, ChronoUnit.MONTHS); System.out.println("下一个月的今天是:" + nextMonthDay); //减少 LocalDateTime lastMonthDay = today.minusMonths(1); LocalDateTime lastYearDay = today.minus(1, ChronoUnit.YEARS); System.out.println("一个月前是:" + lastMonthDay); System.out.println("一年前是:" + lastYearDay); } 3.3 时间修改

通过with修改时间

public static void edit() { LocalDateTime today = LocalDateTime.now(); // 修改年为2012年 LocalDateTime thisYearDay = today.withYear(2012); System.out.println("修改年后的时间为:" + thisYearDay); // 修改为12月 LocalDateTime thisMonthDay = today.with(ChronoField.MONTH_OF_YEAR, 12); System.out.println("修改月后的时间为:" + thisMonthDay); } 3.4 时间计算

通过 TemporalAdjusters 的静态方法 和 Duration 计算时间

public static void compute() { // TemporalAdjusters 的静态方法 LocalDate today = LocalDate.now(); // 获取今年的第一天 LocalDate date = today.with(firstDayOfYear()); System.out.println("今年的第一天是:" + date); // Duration 计算 LocalDateTime from = LocalDateTime.now(); LocalDateTime to = LocalDateTime.now().plusMonths(1); Duration duration = Duration.between(from, to); // 区间统计换算 // 总天数 long days = duration.toDays(); System.out.println("相隔" + days + "天"); // 小时数 long hours = duration.toHours(); System.out.println("相隔" + hours + "小时"); // 分钟数 long minutes = duration.toMinutes(); System.out.println("相隔" + minutes + "分钟"); }

TemporalAdjusters的更多方法

方法名称 描述
dayOfWeekInMonth()   返回同一个月中每周的第几天  
firstDayOfMonth()   返回当月的第一天  
firstDayOfNextMonth()   返回下月的第一天  
firstDayOfNextYear()   返回下一年的第一天  
firstDayOfYear()   返回本年的第一天  
firstInMonth()   返回同一个月中第一个星期几  
lastDayOfMonth()   返回当月的最后一天  
lastDayOfNextMonth()   返回下月的最后一天  
lastDayOfNextYear()   返回下一年的最后一天  
lastDayOfYear()   返回本年的最后一天  
lastInMonth()   返回同一个月中最后一个星期几  
next() / previous()   返回后一个/前一个给定的星期几  
nextOrSame() / previousOrSame()   返回后一个/前一个给定的星期几,如果这个值满足条件,直接返回  
四、时间日期格式化 4.1 格式化时间

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfwyp.html