从JDK8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:
类型 | 解释 |
---|---|
LocalDate | 不包含具体时间的日期 |
LocalTime | 不包含日期的时间 |
LocalDateTime | 包含了日期以及时间 |
Instant | 代表时间戳 |
DateTimeFormatter | 用于做时间的格式化和解析的 |
Duration | 用于计算两个”时间“间隔 |
Period | 用于计算两个”日期“ 间隔 |
特点:
新增的API严格区分了时刻、本地日期、本地时间、并且对日期和时间进行运算更加方便。
其次,新的API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必被修改。
首先要介绍的是:
LocalDate、LocalTime、LocalDateTime
他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象。
他们三者构建对象的API是通用的。
常用方法:
方法名 | 说明 | 构建方式 |
---|---|---|
public static Xxxx now() | 静态方法,根据当前时间创建对象 | LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); |
public static Xxxx of(…) | 静态方法,指定日期/时间创建对象 | LocalDate localDate1 = LocalDate.of(2021, 10, 9); LocalTime localTime1 =LocalTime.of(11,25,10); LocalDateTime localDateTime1=LocalDateTime.of(2022,02,20,8,9); |
LocalDateTime 的转换API:
方法名 | 说明 | 构建方式 |
---|---|---|
public LocalDate toLocalDate() | 转换成一个LocalDate对象 | LocalDate ld =LocalDateTime.toLocalDate(); //日期 |
public LocalDate toLocalTime() | 转换成一个LocalTime对象 | LocalTime lt=LocalDateTime.toLocalTime();//时间 |
修改时间相关API:
方法名 | 说明 |
---|---|
plusDays,plusWeeks,plusMonths,plusYears | 向前localDate对象添加几天、几周、几个月、几年 |
minusDays,minusWeeks,minusMonths,minusYears | 从当前licalDate对象减去几天、几周、几个月、几年 |
withDayOfMonth,withDayOfYear,withMonth,withYear | 将月份天数、年份天数、月份、年份修改为指定的值并返回新的LocalDate对象 |
isBefore, isAfter | 比较两个LocalDate |
代码案例演示:
import java.time.*;
public class LocalDate1 {
public static void main(String[] args) {
LocalDate01();
LocalTime02();
LocalDateTime03();
updateLocalDateTimeApi04();
}
private static void updateLocalDateTimeApi04() {
LocalDate localDate = LocalDate.now();
System.out.println("十天后:" + localDate.plusDays(10));
System.out.println("一周后:" + localDate.plusWeeks(1));
System.out.println("一月后:" + localDate.plusMonths(1));
System.out.println("一年后:" + localDate.plusYears(1));
System.out.println("十天前:" + localDate.minusDays(10));
System.out.println("一周前:" + localDate.minusWeeks(1));
System.out.println("一月前:" + localDate.minusMonths(1));
System.out.println("一年前:" + localDate.minusYears(1));
//修改:
System.out.println("修改至2018年:" + localDate.withYear(2018));
System.out.println("修改至2月:" + localDate.withMonth(2));
System.out.println("修改至18号:" + localDate.withDayOfMonth(18));
System.out.println("修改至今年的第100天:" + localDate.withDayOfYear(100));
System.out.println("----------------");
LocalTime localTime = LocalTime.now();
System.out.println("当前时间:" + localTime);
System.out.println("一小时前:" + localTime.minusHours(1));
System.out.println("一分钟前:" + localTime.minusMinutes(1));
System.out.println("一秒钟前:" + localTime.minusSeconds(1));
System.out.println("一纳秒前:" + localTime.minusNanos(1));
System.out.println("一小时后:" + localTime.plusHours(1));
System.out.println("一分钟后:" + localTime.plusMinutes(1));
System.out.println("一秒钟后:" + localTime.plusSeconds(1));
System.out.println("一纳秒后:" + l