目录
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课程