上篇文章简单介绍了Java8时间日期的基本使用,以及应用场景。这篇文章重点介绍,实际项目中使用到的Java 8时间日期。
Date类型转换为LocalDateTime
LocalDateTime startTime = LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault());
转换的时候需要用到时区ZoneID, 它根据一定的规则将Instant转换成一个LocalDateTime。
下面是一个实际使用案例:
LocalDateTime startTime = LocalDateTime.ofInstant(assignOnlineRoomRequest.getStartTime().toInstant(), ZoneId.systemDefault());
LocalDateTime endTime = LocalDateTime.ofInstant(assignOnlineRoomRequest.getEndTime().toInstant(), ZoneId.systemDefault());
Preconditions.checkArgument(startTime.getHour() >= 8, "会议开始时间不能早于8点");
Preconditions.checkArgument(startTime.getHour() <= 20, "会议开始时间不能晚于20点");
Preconditions.checkArgument(startTime.toLocalDate().equals(endTime.toLocalDate()), "会议开始时间和结束时间必须是同一天");
Preconditions.checkArgument(endTime.isAfter(startTime), "会议结束时间必须在开始时间之后");
Preconditions.checkArgument(LocalDateTime.now().isBefore(endTime), "会议结束时间必须晚于当前时间");
LocalDateTime格式化
LocalDateTime格式化为:yyyy-MM-dd HH:mm:ss
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
formatter.format(LocalDateTime.now())
LocalDateTime的日期时间操作
LocalDateTime localDateTime = LocalDateTime.of(2020, Month.JULY, 1, 8, 0, 0);
//随机往后偏移一个时间
LocalDateTime startTime =localDateTime.plusDays(RandomUtils.nextInt(1, 30)).plusHours(RandomUtils.nextInt(0, 12)).plusMinutes(RandomUtils.nextInt(0, 60)).plusSeconds(RandomUtils.nextInt(0, 60));
LocalDateTime endTime = startTime.plusMinutes(RandomUtils.nextInt(60, 180));
LocalDateTime转换为Date类型
LocalDateTime now = LocalDateTime.now();
Instant instant = now.atZone(ZoneId.systemDefault()).toInstant();
Date date = Date.from(instant);
UTC时区字符串转换为当前时区时间
ZonedDateTime parse = ZonedDateTime.parse("2011-12-03T10:15:30Z").withZoneSameInstant(ZoneId.systemDefault());
LocalDateTime localDateTime = parse.toLocalDateTime();
System.out.println(localDateTime);
未完待续...
网友评论