为什么要学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:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)
获取对象的方案
案例演示
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(都是处理年、月、日、星期相关的)
LocalTime的常用API(都是处理时、分、秒、纳秒相关的)
方法名 | 说明 |
public int getHour() | 获取小时 |
public int getMinute() | 获取分 |
public int getSecond() | 获取秒 |
public int getNano() | 获取纳秒 |
LocalDateTime的常用API(可以处理年、月、日、星期、时、分、秒、纳秒等信息)
END