Java 8中的时间处理
在Java8中, 新的时间及⽇期API位于java.time包中, 该包中有哪些重要的类。 分别代表了什么?
Instant
: 时间戳
Duration
: 持续时间, 时间差
LocalDate
: 只包含⽇期, ⽐如: 2016-10-20
LocalTime
: 只包含时间, ⽐如: 22:15:16
LocalDateTime
: 包含⽇期和时间, ⽐如: 2016-10-20 22:15:16
Period
: 时间段
ZoneOffset
: 时区偏移量, ⽐如: +8:00
ZonedDateTime
: 带时区的时间
Clock
: 时钟, ⽐如获取⽬前美国纽约的时间
LocalTime 和 LocalDate的区别?
LocalDate
表⽰⽇期, 年⽉⽇, LocalTime
表⽰时间, 时分 秒
获取当前时间
在Java8中,使用如下方式获取当前时间:
LocalDate today = LocalDate.now(); int year = today.getYear(); int month = today.getMonthValue(); int day = today.getDayOfMonth(); System.out.printf("Year : %d Month : %d day : %d t %n", year,month, day);
创建指定日期的时间
LocalDate date = LocalDate.of(2018, 01, 01);
检查闰年
直接使⽤LocalDate的isLeapYear即可判断是否闰年
LocalDate nowDate = LocalDate.now(); //判断闰年 boolean leapYear = nowDate.isLeapYear();
计算两个⽇期之间的天数和⽉数
在Java 8中可以⽤java.time.Period类来做计算。
Period period = Period.between(LocalDate.of(2018, 1, 5),LocalDate.of(2018, 2, 5));
利用DateTimeFormatter 进行LocalDateTime与String互转
{//LocalDateTime转String(LocalDate,LocalTime类似) DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime localDateTime = LocalDateTime.now(); String localDateTimeStr = dtf.format(localDateTime); System.out.println("LocalDateTime转成String类型的时间:" + localDateTimeStr);//2020-06-01 13:23:32 System.out.println("LocalDateTime转成String类型的时间:" + localDateTime.toString());//2020-06-01T13:23:32.430 } {//String转LocalDateTime(LocalDate,LocalTime类似) DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime localDateTime = LocalDateTime.parse("2018-06-01 10:12:05", dtf); System.out.println("String类型的时间转成LocalDateTime:" + localDateTime);//2018-06-01T10:12:05 }
利用Instant 进行LocalDateTime与Date互转
{//LocalDateTime转Date LocalDateTime localDateTime = LocalDateTime.now(); ZoneId zone = ZoneId.systemDefault(); Instant instant = localDateTime.atZone(zone).toInstant(); Date nowDate = Date.from(instant); System.out.println(nowDate);//Mon Jun 01 13:55:40 CST 2020 } {//Date转LocalDateTime Date nowDate = new Date(); Instant instant = nowDate.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); System.out.println(localDateTime);//2020-06-01T13:59:21.315 } {//LocalDate转Date LocalDate localDate = LocalDate.now(); ZoneId zone = ZoneId.systemDefault(); Instant instant = localDate.atStartOfDay().atZone(zone).toInstant(); Date nowDate = Date.from(instant); System.out.println(nowDate);//Mon Jun 01 00:00:00 CST 2020 } {//Date转LocalDate Date date = new Date(); Instant instant = date.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); LocalDate localDate = localDateTime.toLocalDate(); System.out.println(localDate);//2020-06-01 } {//LocalTime转Date LocalTime localTime = LocalTime.now(); LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime); ZoneId zone = ZoneId.systemDefault(); Instant instant = localDateTime.atZone(zone).toInstant(); Date nowDate = Date.from(instant); System.out.println(nowDate);//Mon Jun 01 14:24:29 CST 2020 } {//Date转LocalTime Date date = new Date(); Instant instant = date.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); LocalTime localTime = localDateTime.toLocalTime(); System.out.println(localTime);//14:24:29.686 }
LocalDateTime,LocalDate,LocalTime互转
{//LocalDateTime转LocalDate LocalDateTime localDateTime = LocalDateTime.now(); LocalDate localDate = localDateTime.toLocalDate(); System.out.println(localDate);//2020-06-01 } {//LocalDate转LocalDateTime LocalDate localDate = LocalDate.now(); ZoneId zone = ZoneId.systemDefault(); Instant instant = localDate.atStartOfDay().atZone(zone).toInstant(); Date date = Date.from(instant); System.out.println(date);//Mon Jun 01 00:00:00 CST 2020 } {//LocalDateTime转LocalTime LocalDateTime localDateTime = LocalDateTime.now(); LocalTime localTime = localDateTime.toLocalTime(); System.out.println(localTime);//14:29:44.243 } {//LocalTime转LocalDateTime LocalTime localTime = LocalTime.now(); LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime); System.out.println(localDateTime);//2020-06-01T14:31:35.366 }