JDK8时间相关类超详细总结(含多个实例)
为什么需要时间相关的类?
在程序设计中,我们经常需要使用到时间相关的操作,例如获取当前时间、将时间转换成特定格式、计算时间差等。而Java的JDK 8中提供了许多时间类的操作,可以方便地进行时间处理。
JDK8时间相关类
Instant
Instant类表示时间点,它是相对于时间线上的一个点,可以精确到纳秒级别。常用的方法如下:
- now():获取当前时间点
- plus()/minus():加/减时间
- isBefore()/isAfter()/isEqual():判断时间前后关系
- toEpochMilli():将时间转换成毫秒数
- from():根据传入参数获得时间点
Instant instant1 = Instant.now();
System.out.println("当前时间点:" + instant1);
Instant instant2 = Instant.ofEpochMilli(System.currentTimeMillis());
System.out.println("当前时间对应的时间点:" + instant2);
LocalDate
LocalDate类表示日期,它只包含年月日信息,没有时分秒。常用的方法如下:
- now():获取当前日期
- plusDays()/plusWeeks()/plusMonths()/plusYears():增加或减少指定天/周/月/年的日期
- minusDays()/minusWeeks()/minusMonths()/minusYears():同上,只是减少
- isBefore()/isAfter()/isEqual():判断日期前后关系
- getYear()/getMonthValue()/getDayOfMonth():获取年/月/日信息
- withYear()/withMonth():改变年/月信息
LocalDate localDate1 = LocalDate.now();
System.out.println("当前日期:" + localDate1);
LocalDate localDate2 = LocalDate.of(2021, 12, 25);
System.out.println("指定日期:" + localDate2);
System.out.println("指定日期增加30天:" + localDate2.plusDays(30));
LocalTime
LocalTime类表示时间,它只包含时分秒信息。常用的方法如下:
- now():获取当前时间
- plusHours()/plusMinutes()/plusSeconds():增加或减少指定小时/分钟/秒钟的时间
- minusHours()/minusMinutes()/minusSeconds():同上,只是减少
- isBefore()/isAfter()/isEqual():判断时间前后关系
- getHour()/getMinute()/getSecond():获取小时/分钟/秒钟信息
LocalTime localTime1 = LocalTime.now();
System.out.println("当前时间:" + localTime1);
LocalTime localTime2 = LocalTime.of(19, 30, 15);
System.out.println("指定时间:" + localTime2);
System.out.println("指定时间增加7小时:" + localTime2.plusHours(7));
LocalDateTime
LocalDateTime类表示日期和时间,它是LocalDate和LocalTime的组合体,同时包含年月日时分秒信息。常用的方法如下:
- now():获取当前日期时间
- plusDays()/plusWeeks()/plusMonths()/plusYears()/plusHours()/plusMinutes()/plusSeconds():增加或减少指定天/周/月/年/小时/分钟/秒钟的日期时间
- minusDays()/minusWeeks()/minusMonths()/minusYears()/minusHours()/minusMinutes()/minusSeconds():同上,只是减少
- isBefore()/isAfter()/isEqual():判断日期时间前后关系
- getYear()/getMonthValue()/getDayOfMonth()/getHour()/getMinute()/getSecond():获取年/月/日/小时/分钟/秒钟信息
- withYear()/withMonth():改变年/月信息
LocalDateTime localDateTime1 = LocalDateTime.now();
System.out.println("当前日期时间:" + localDateTime1);
LocalDateTime localDateTime2 = LocalDateTime.of(2021, 12, 25, 19, 30, 15);
System.out.println("指定日期时间:" + localDateTime2);
System.out.println("指定日期时间增加30天:" + localDateTime2.plusDays(30));
ZonedDateTime
ZonedDateTime类表示具有时区信息的日期和时间,继承自LocalDateTime,同时包含ZoneId和ZoneOffset两个成员变量,分别表示时区和时区偏移量。常用的方法如下:
- now():获取当前日期时间
- withZoneSameInstant():改变时区,同时调整日期时间使其与原日期时间相同
- withZoneSameLocal():改变时区,不调整日期时间
- toEpochSecond():将日期时间转换成Unix时间戳
- from():根据传入参数获得ZonedDateTime
ZonedDateTime zonedDateTime1 = ZonedDateTime.now();
System.out.println("当前日期时间:" + zonedDateTime1);
ZonedDateTime zonedDateTime2 = ZonedDateTime.of(LocalDateTime.of(2021, 12, 25, 19, 30, 15), ZoneId.of("Asia/Shanghai"));
System.out.println("指定日期时间:" + zonedDateTime2);
ZonedDateTime zonedDateTime3 = zonedDateTime2.withZoneSameInstant(ZoneId.of("America/New_York"));
System.out.println("指定日期时间在美国纽约时区:" + zonedDateTime3);
实例演示
例1:计算两个时间点之间的时间差
Instant instant1 = Instant.now();
Thread.sleep(2000);
Instant instant2 = Instant.now();
Duration duration = Duration.between(instant1, instant2);
System.out.println("时间差(秒):" + duration.getSeconds());
例2:将日期时间转换成指定格式的字符串
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.now();
String str = localDateTime.format(dateTimeFormatter);
System.out.println("指定格式的字符串:" + str);
总结
JDK 8提供的时间相关类可以让我们更加方便地进行时间处理,例如计算时间差、获取当前时间、改变日期时间等。掌握这些类的使用可以大大提高我们的开发效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JDK8时间相关类超详细总结(含多个实例) - Python技术站