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 DurationDuration的内部实现与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 PeriodPeriod与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同理。
以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 格式化时间