import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.Temporal; import java.time.temporal.TemporalAdjuster; * @description: 验证JDK8的日期和时间类 * @author: xxx * @date: 2021/12/02 22:08 public class TestLocalDateTime { * 验证:LocalDate 日期 yyyy-MM-dd @Test public void testLocalDate(){ LocalDate.of(1985, 8, 6); LocalDate.of(1985, Month.AUGUST,8); LocalDate.ofYearDay(1985,218); //从1970年之后的N天的日期 LocalDate.ofEpochDay(1); LocalDate now = LocalDate.now(); now.getYear(); now.getMonth().getValue(); now.getDayOfMonth(); now.getDayOfWeek(); now.getDayOfYear(); * 验证:LocalTime 时间 HH:mm:ss(.ns) @Test public void testLocalTime(){ LocalTime.of(11, 15, 12, 234_444_933); LocalTime.ofSecondOfDay(100L); LocalTime.of(1, 1, 1); LocalTime now = LocalTime.now(); now.getHour(); now.getMinute(); now.getSecond(); now.getNano(); * 验证:LocalDateTime 日期时间 yyyy-MM-ddTHH:mm:ss(.ns) @Test public void testLocalDateTime(){ LocalDateTime.of(1908, 12, 12, 12, 12, 12, 12); LocalDateTime now = LocalDateTime.now(); now.getYear(); now.getMonthValue(); now.getDayOfMonth(); now.getDayOfYear(); now.getDayOfWeek(); now.getHour(); now.getMinute(); now.getSecond(); now.getNano(); * 验证:日期时间的操作 * 日期时间对象都是final修饰,不可变 @Test public void testLocalDateTimeOption(){ //修改日期时间 不对原始对象做修改 withAttribute LocalDateTime now = LocalDateTime.now(); LocalDateTime setYear = now.withYear(1993); System.out.println(now); System.out.println(setYear); //在当前对象基础上加上or减去指定时间 plus | minus now.plusDays(2); now.plusMonths(2); now.minusYears(1); //日期比较 isBefore() isAfter() equal() LocalDate of = LocalDate.of(1998, 12, 12); System.out.println(LocalDate.now().isAfter(of)); //日期格式化,默认格式 yyyy-MM-ddTHH:mm:ss DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println(now.format(formatter)); System.out.println(LocalDateTime.parse("1993-12-12 12:12:12", formatter)); System.out.println(LocalDateTime.parse("1993-12-12T12:12:12")); * 日期时间差 * Duration: LocalTime之间的距离对象 * Period: LocalDate之间的距离对象 Duration duration = Duration.between(LocalTime.of(18, 12, 12), LocalTime.now()); System.out.println(duration.toDays()); System.out.println(duration.toHours()); System.out.println(duration.toMinutes()); //10天 = 240H System.out.println(Duration.ofDays(10)); System.out.println(Duration.ofHours(1)); System.out.println(Duration.ofMinutes(6)); //10S System.out.println(Duration.ofSeconds(10)); Period period = Period.between(LocalDate.now(), LocalDate.now().plusDays(1000)); System.out.println(period.getYears()); System.out.println(period.getMonths()); System.out.println(period.getDays()); * 验证:Instant类 -- 时间戳 @Test public void testInstant(){ Instant now = Instant.now(); System.out.println(now); //epoch 到现在的秒 System.out.println(now.getEpochSecond()); //纳秒数指的是该秒内的纳秒时间 System.out.println(now.getNano()); //epoch 到现在的 毫秒 System.out.println(now.toEpochMilli()); //等同于toEpochMilli System.out.println(System.currentTimeMillis()); //epoch 之后的5秒 System.out.println(Instant.ofEpochSecond(5)); * 验证:时间校正器 @Test public void testTimeTemporalAdjuster(){ LocalDateTime now = LocalDateTime.now(); //下个月的第一天 TemporalAdjuster temporalAdjuster = new TemporalAdjuster() { @Override public Temporal adjustInto(Temporal temporal) { //这里temporal = now() LocalDateTime now = (LocalDateTime)temporal; System.out.println(now); LocalDateTime nextMonth = now.plusMonths(1).withDayOfMonth(1); return nextMonth; System.out.println(now.with(temporalAdjuster)); * 验证:时区 * LocalDate/DateTime/Time 不带时区 * ZoneDate/DateTime/Time 带时区 @Test public void testTimeZone(){ //获取所有的时区ID,格式为 区域/城市 //ZoneId.getAvailableZoneIds().forEach(System.out::println); //根据当前系统的时区now(Clock.systemDefaultZone()),返回时间 System.out.println(LocalDateTime.now()); //获取带时区的类,世界标准时间 System.out.println(ZonedDateTime.now(Clock.systemUTC())); System.out.println(ZonedDateTime.now()); //指定时区 System.out.println(ZonedDateTime.now(ZoneId.of("America/Vancouver")));