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
}