目录
JDK 8新增的时间API
LocalDate、LocalTime、LocalDateTime
获取对象的方案
案例演示
编辑
LocalDateTime的不同
常用API总结
为什么要学JDK 8 新增的时间?
JDK 8之前传统的时间API
- 设计不合理,使用不方便,很多都被淘汰了。
- 都是可变对象,修改后会丢失最开始的时间信息。
- 线程不安全。
- 只能精确到毫秒。
JDK 8开始之后新增的时间API
- 设计更合理,功能丰富,使用更方便。
- 都是不可变对象,修改后会返回新的时间对象,不会丢失最开始的时间。
- 线程安全
- 能精确到毫秒、纳秒。
JDK 8新增的时间API
代替Calendar
- LocalDate:年、月、日0
- LocalTime:时、分、秒
- LocalDateTime:年、月、日 时、分、秒
- ZoneId :时区
- ZonedDateTime:带时区的时间
代替Date
- Instant:时间戳/时间线
代替SimpleDateFormat
- DateTimeFormatter:用于时间的格式化和解析 它是线程安全的
其他补充
- Period:时间间隔(年、月、日)
- Duration:时间间隔(时、分、秒、纳秒)
本篇我们先来学习LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime
- LocalDate:代表本地日期(年、月、日、星期)
- LocalTime:代表本地时间(时、分、秒、纳秒)
- LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)
获取对象的方案
| 方法名 | 示例 | 
|---|---|
| public static Xxxx.now():获取系统当前时间对应的该对象 | LocaDate Id = LocalDate.now(); | 
| LocalTime lt = LocalTime.now(); | |
| LocalDateTime Idt = LocalDateTime.now(); | |
| public static Xxxx.of():获取指定时间的对象 | LocalDate localDate1 = LocalDate.of(2099 , 11,11); | 
| LocalTime localTime1 = LocalTime.of(9, 8, 59); | |
| LocalDateTime localDateTime1 = LocalDateTime.of(2025, 11, 16,14,30,01); | 
案例演示
1.获取日期对象中的信息
public class Test {
    public static void main(String[] args) throws ParseException {
        //获取本地日期对象
        LocalDate ld = LocalDate.now();         //年、月、日
        System.out.println(ld);
        //1.获取日期对象中的信息
        int year = ld.getYear();                //获取年
        int month = ld.getMonthValue();         //获取月份
        int day = ld.getDayOfMonth();           //获取日
        int dayOfYear = ld.getDayOfYear();      //获取一年中的第几天
        int dayOfWeek = ld.getDayOfWeek().getValue();      //获取星期几
        System.out.println("年份:" + year);
        System.out.println("月份:" + month);
        System.out.println("日:" + day);
        System.out.println("2024年的第几天:" + dayOfYear);
        System.out.println("星期几:" + dayOfWeek);
    }
}
运行结果:

2.直接修改某个信息
public class Test {
    public static void main(String[] args) throws ParseException {
        //获取本地日期对象
        LocalDate ld = LocalDate.now();         //年、月、日
        //2.直接修改某个信息   每次修改都会产生一个新的日期对象
        LocalDate ld2 = ld.withYear(2099);      //修改年份为2099年
        LocalDate ld3 = ld.withMonth(12);       //修改月份为12月
        System.out.println("当前:" + ld);
        System.out.println("修改后:");
        System.out.println(ld2);
        System.out.println(ld3);
    }
}
运行结果:

3.把某个信息加或减多少 (加、减也是一样,修改之后会产生新的日期对象)
public class Test {
    public static void main(String[] args) throws ParseException {
        //获取本地日期对象
        LocalDate ld = LocalDate.now();         //年、月、日
        //3.把某个信息加或减多少
        LocalDate ld4 = ld.plusYears(2);        //加两年
        LocalDate ld5 = ld.plusMonths(2);       //加俩月
        LocalDate ld6 = ld.minusYears(2);       //减两年
        LocalDate ld7 = ld.minusMonths(2);      //减俩月
        System.out.println(ld4);
        System.out.println(ld5);
        System.out.println(ld6);
        System.out.println(ld7);
    }
}
运行结果:

4.获取指定日期的LocalDate对象&判断两个日期对象是否相等,在前还是在后
public class Test {
    public static void main(String[] args) throws ParseException {
        //获取本地日期对象
        LocalDate ld = LocalDate.now();         //年、月、日
        //获取指定日期的LocalDate对象
        LocalDate ld8 = LocalDate.of(2099,12,12);
        LocalDate ld9 = LocalDate.of(2099,12,12);
        //判断2个日期对象是否相等,在前还是在后
        System.out.println(ld8.equals(ld9));    //true
        System.out.println(ld8.isAfter(ld));    //true
        System.out.println(ld8.isBefore(ld));   //false
    }
}
运行结果:

其他两个类的API用法其实是几乎和这个一样的,只是由于展示的信息不同,所以可以操作的数据的量不同。
LocalDateTime的不同
LocalDateTime稍微会有点不一样,它是包含了所有的日期信息:

且它是可以转换成LocalDate对象或者LocalTime对象的

常用API总结
LocalDate的常用API(都是处理年、月、日、星期相关的)
| 方法名 | 说明 | 
|---|---|
| public int geYear() | 获取年 | 
| public int getMonthValue() | 获取月份(1-12) | 
| public int getDayofMonth() | 获取日 | 
| public int getDayofYear() | 获取当前是一年中的第几天 | 
| public DayOfWeek getDayOfWeek() | 获取星期几:ld.getDayofWeek.getValue() | 
| 方法名 | 说明 | 
|---|---|
| withYear、withMonth、withDayOfMonth、withDayOfYear | 直接修改某个信息,返回新日期对象 | 
| plusYears、plusMonths、plusDays、plusWeeks | 把某个信息加多少,返回新日期对象 | 
| minusYears、minusMonths、minusDays, minusweeks | 把某个信息减多少,返回新日期对象 | 
| equals、isBefore、isAfter | 判断两个日期对象,是否相等,在前还是在后 | 
LocalTime的常用API(都是处理时、分、秒、纳秒相关的)
| 方法名 | 说明 | 
|---|---|
| public int getHour() | 获取小时 | 
| public int getMinute() | 获取分 | 
| public int getSecond() | 获取秒 | 
| public int getNano() | 获取纳秒 | 
| 方法名 | 说明 | 
|---|---|
| withHour、withMinute、withSecond、withNano | 修改时间,返回新时间对象 | 
| plusHours、plusMinutes、plusSeconds、plusNanos | 把某个信息加多少,返回新时间对象 | 
| minusHours、minusMinutes、minusSeconds、 minusNanos | 把某个信息减多少,返回新时间对象 | 
| equals、isBefore、isAfter | 判断2个时间对象,是否相等,在前还是在后 | 
LocalDateTime的常用API(可以处理年、月、日、星期、时、分、秒、纳秒等信息)
| 方法名 | 说明 | 
|---|---|
| getYear、getMonthValue、getDayOfMonth、getDayOfYear | 获取年月日、时分秒、纳秒等 | 
| getDayOfweek、getHour、getMinute、getSecond、getNano | |
| withYear、withMonth、withDayOfMonth、withDayOfYear | 修改某个信息,返回新日期时间对象 | 
| withHour、withMinute、withSecond、withNano | |
| plusYears、plusMonths、plusDays、plusWeeks | 把某个信息加多少,返回新日期时间对象 | 
| plusHours、plusMinutes、plusSeconds、plusNanos | |
| minusYears、minusMonths、minusDays、minusWeeks | 把某个信息减多少,返回新日期时间对象 | 
| minusHours、minusMinutes、minusSeconds、minusNanos | |
| equals、isBefore、isAfter | equals isBefore isAfter判断2个时间对象,是否相等,在前还是在后 | 
END
学习自:黑马程序员——JavaSE课程



















