目录
时间戳 Instant
持续时间,时间差 Duration
本地日期 LocalDate
本地时间 LocalTime
日期格式化
举个栗子
Instant是时间线上的一个点,表示一个时间戳。Instant可以精确到纳秒,这超过了long的最大表示范围,所以在Instant的实现中是分成了两部分来表示,一部分是seconds,表示从1970-01-01 00:00:00开始到现在的秒数,另一个部分是nanos,表示纳秒部分。以下是创建Instant的两种方法:
Instant now = Instant.now(); 获取当前时刻的时间戳,结果为:2020-02-20T14:14:15.913Z;
Instant instant = Instant.ofEpochSecond(60, 100000);
ofEpochSecond()方法的第一个参数为秒,第二个参数为纳秒,上面的代码表示从1970-01-01 00:00:00开始后一分钟的10万纳秒的时刻,其结果为:1970-01-01T00:01:00.000100Z。
有了时间点,自然就衍生出时间段了,那就是Duration。Duration的内部实现与Instant类似,也是包含两部分:seconds表示秒,nanos表示纳秒。Duration是两个时间戳的差值,所以使用java.time中的时间戳类,例如Instant、LocalDateTime等实现了Temporal类的日期时间类为参数,通过Duration.between()方法创建Duration对象: LocalDateTime from = LocalDateTime.of(2020, Month.JANUARY, 22, 16, 6, 0); // 2020-01-22 16:06:00 LocalDateTime to = LocalDateTime.of(2020, Month.FEBRUARY, 22, 16, 6, 0); // 2020-02-22 16:06:00 Duration duration = Duration.between(from, to); // 表示从 2020-01-22 16:06:00到 2020-02-22 16:06:00 这段时间
Duration对象还可以通过of()方法创建,该方法接受一个时间段长度,和一个时间单位作为参数: Duration duration1 = Duration.of(5, ChronoUnit.DAYS); // 5天 Duration duration2 = Duration.of(1000, ChronoUnit.MILLIS); // 1000毫秒
LocalDate birthday = LocalDate.of(1995, 6,11); LocalDate today = LocalDate.now(); System.out.println(today.toEpochDay()-birthday.toEpochDay());
LocalTime rightNow = LocalTime.now(); LocalTime bedTime = LocalTime.of(22,30);//22:00:00 LocalTime wakeUp = bedTime.plusHours(8);//6:30:00
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss"); LocalDateTime localDateTime = LocalDateTime.now(); String format = dateTimeFormatter.format(localDateTime); System.out.println(format);