jdk1.8新增的LocalDate、LocalTime、LocalDateTime的相关操作(告别Date)
文章目录
一、LocalDate对象用法
1、LocalDate的创建方式
(初始化、设置指定日期、装换…)
// 1、初始化
LocalDate now = LocalDate.now(); // 2022-11-23
// 2、设置指定的年月日,参数类型(int)
LocalDate of = LocalDate.of(2022, 10, 11); // 2022-10-11
// 3、获取指定年份的第几天, one:年份,two:第几天
LocalDate localDate = LocalDate.ofYearDay(2022, 12); // 2022-01-12
// 4、将指定的字符串转换成LocalDate类型
LocalDate parse = LocalDate.parse("2022-10-10"); // 2022-10-10
// 5、从指定格式的文本中字符串中获取LocalDate实例,最后格式为(yyyy-MM-dd)
LocalDate parse1 = LocalDate.parse("09-10-2022", DateTimeFormatter.ofPattern("dd-MM-yyyy")); // 2022-10-09
2、增加日期
(通过指定单位增加指定时间)
// TODO: 增加日期(version 1.0)
// 添加指定天数
LocalDate localDate1 = LocalDate.now().plusDays(10); // 2022-12-03
// 添加指定月数
LocalDate localDate2 = LocalDate.now().plusMonths(2); // 2023-01-23
// 添加指定年份
LocalDate localDate3 = LocalDate.now().plusYears(2); // 2024-11-23
// 添加指定周数
LocalDate localDate4 = LocalDate.now().plusWeeks(1); // 2022-11-30
// TODO: 增加日期(version 2.0)
// 1、添加指定天数
LocalDate plus = LocalDate.now().plus(10, ChronoUnit.DAYS); // 2022-12-03
// 2、添加指定月数
LocalDate plus1 = LocalDate.now().plus(2, ChronoUnit.MONTHS); // 2023-01-23
// 3、添加指定年份
LocalDate plus2 = LocalDate.now().plus(2, ChronoUnit.YEARS); // 2024-11-23
// 4、添加指定周数
LocalDate plus6 = LocalDate.now().plus(1, ChronoUnit.WEEKS); // 2022-11-30
// TODO:增加日期(version 3.0)
// 添加指定天数
LocalDate plus3 = LocalDate.now().plus(Period.ofDays(10)); // 2022-12-03
// 添加指定月数
LocalDate plus4 = LocalDate.now().plus(Period.ofMonths(2)); // 2023-01-23
// 添加指定年份
LocalDate plus5 = LocalDate.now().plus(Period.ofYears(2)); // 2024-11-23
// 添加指定周数
LocalDate plus7 = LocalDate.now().plus(Period.ofWeeks(1)); // 2022-11-30
3、减少日期
(通过指定单位减少指定时间)
// TODO: 减少日期(version 1.0)
// 减少指定天数
LocalDate localDate5 = LocalDate.now().minusDays(10); // 2022-11-13
// 减少指定月份
LocalDate localDate6 = LocalDate.now().minusMonths(2); // 2022-09-23
// 减少指定年份
LocalDate localDate7 = LocalDate.now().minusYears(2); // 2020-11-23
// 减少指定周数
LocalDate localDate8 = LocalDate.now().minusWeeks(1); // 2022-11-16
// TODO: 减少日期(version 2.0)
// 减少指定天数
LocalDate minus = LocalDate.now().minus(Period.ofDays(10)); // 2022-11-13
// 减少指定月份
LocalDate minus1 = LocalDate.now().minus(Period.ofMonths(2)); // 2022-09-23
// 减少指定年份
LocalDate minus2 = LocalDate.now().minus(Period.ofYears(2)); // 2020-11-23
// 减少指定周数
LocalDate minus3 = LocalDate.now().minus(Period.ofWeeks(1)); // 2022-11-16
// TODO: 减少日期(version 3.0)
// 减少指定天数
LocalDate minus4 = LocalDate.now().minus(10, ChronoUnit.DAYS); // 2022-11-13
// 减少指定月份
LocalDate minus5 = LocalDate.now().minus(2, ChronoUnit.MONTHS); // 2022-09-23
// 减少指定年份
LocalDate minus6 = LocalDate.now().minus(2, ChronoUnit.YEARS); // 2020-11-23
// 减少指定周数
LocalDate minus7 = LocalDate.now().minus(1, ChronoUnit.WEEKS); // 2022-11-16
4、调整日期
(也就是为日期通过指定单位设置指定值)
// TODO: 调整日期(version 1.0)
// 调整年份
LocalDate localDate9 = LocalDate.now().withYear(2000); // 2000-11-23
// 调整月份
LocalDate localDate10 = LocalDate.now().withMonth(1); // 2022-01-23
// 按年为单位调整日期
LocalDate localDate11 = LocalDate.now().withDayOfYear(10); // 2022-01-10
// 按月为单位调整日期
LocalDate localDate12 = LocalDate.now().withDayOfMonth(10); // 2022-11-10
// TODO:调整日期(version 2.0)
// 调整年份
LocalDate with = LocalDate.now().with(ChronoField.YEAR, 2000); // 2000-11-23
// 调整月份
LocalDate with1 = LocalDate.now().with(ChronoField.MONTH_OF_YEAR, 1); // 2022-01-23
// 按年为单位调整日期
LocalDate with2 = LocalDate.now().with(ChronoField.DAY_OF_YEAR, 10); // 2022-01-10
// 按月为单位调整日期
LocalDate with3 = LocalDate.now().with(ChronoField.DAY_OF_MONTH, 10); // 2022-11-10
// TODO: 调整日期(version 3.0)
// 调整年份
LocalDate with5 = LocalDate.now().with(Year.of(2000)); // 2000-11-23
// 调整月份
LocalDate with4 = LocalDate.now().with(Month.JANUARY); // 2022-01-23
// 按照星期进行调整(当前日期所在周)
LocalDate with6 = LocalDate.now().with(DayOfWeek.SUNDAY); // 2022-11-25
5、获取日期信息
(获取年月日等信息)
// 获取系统时间所在年
int year = LocalDate.now().getYear(); // 2022
// 获取系统时间所在月
Month month = LocalDate.now().getMonth(); // NOVEMBER
// 获取系统时间所在月
int monthValue = LocalDate.now().getMonthValue(); // 11
// 获取系统时间所在月的日期
int dayOfMonth = LocalDate.now().getDayOfMonth(); // 23
// 获取系统时间的天数
int dayOfYear = LocalDate.now().getDayOfYear(); // 327
6、日期格式转换
// TODO: 日期格式转换
String format = LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-yyyy")); // 23-11-2022
7、给当前LocalDate对象设置指定时间
// TODO: 与时间进行结合
LocalDateTime localDateTime = LocalDate.now().atTime(20, 18, 10); // 2022-11-23T20:18:10
8、日期比较
1、isBefore(LocalDate param) 判断对象日期是否在参数日期之前
2、isAfter(LocalDate param) 判断对象日期是否在参数日期之后
3、equals(LocalDate param) 判断两个日期对象是否相等
LocalDate now1 = LocalDate.now(); // 2022-11-23
LocalDate parse2 = LocalDate.parse("2000-10-10");
LocalDate parse3 = LocalDate.parse("2022-11-23");
boolean before = now1.isBefore(parse2); // false
boolean after = now1.isAfter(parse2); // true
boolean equals = now1.equals(parse3); // true
9、检查闰年
boolean leapYear = LocalDate.now().isLeapYear(); // false
10、获取今年的天数和本月的天数
int i = LocalDate.now().lengthOfMonth(); // 30
int i1 = LocalDate.now().lengthOfYear(); // 365
11、获取日期差
LocalDate now2 = LocalDate.now(); // 2022-11-23
LocalDate parse4 = LocalDate.parse("2022-11-20");
Period until = now2.until(parse4) // Period对象中包含年与日
二、LocalTime对象用法(需要方法与LocalDate对象方法相同)
1、LocalTime的创建方法
// 初始化
LocalTime now = LocalTime.now(); // 21:16:43.181
// 通过of方法进行创建
LocalTime of = LocalTime.of(0, 0); // 00:00
LocalTime of1 = LocalTime.of(1, 0, 0); // 01:00
LocalTime of3 = LocalTime.of(18, 10, 10); // 18:10:10
LocalTime of2 = LocalTime.of(2, 0, 0, 0); // 02:00
LocalTime of4 = LocalTime.of(20, 20, 10, 100); // 20:20:10.000000100
// 通过 毫秒数 进行创建
LocalTime localTime = LocalTime.ofSecondOfDay(24 * 60 * 60 - 1); // 23:59:59
// 通过纳秒数进行创建
LocalTime localTime1 = LocalTime.ofNanoOfDay(24L * 60 * 60 * 1000000000 - 1); // 23:59:59.999999999
// 通过字符串进行转换
LocalTime parse = LocalTime.parse("20:00:00"); // 20:00
2、时间比较
// TODO:当前时间21:40
LocalTime of5 = LocalTime.of(20, 10, 10);
boolean after = LocalTime.now().isBefore(of5); // false
boolean after1 = LocalTime.now().isAfter(of5); // true
boolean equals = LocalTime.now().equals(of5); // false
3、时间计算(加、减)
// 以小时为单位进行计算
LocalTime localTime2 = LocalTime.now().plusHours(3); // 00:49:43.736
// 以分钟为单位进行计算
LocalTime localTime3 = LocalTime.now().plusMinutes(30); // 22:19:43.736
// 以秒为单位进行计算
LocalTime localTime4 = LocalTime.now().plusSeconds(100); // 21:51:23.736
// 以纳秒单位进行计算
LocalTime localTime5 = LocalTime.now().plusNanos(10000000000000L); // 00:37:03.503
// 通过指定字段进行计算
LocalTime plus1 = LocalTime.now().plus(3, ChronoUnit.HOURS); // 00:49:43.736
// TODO:减法运算(和加法运算的方法差不多,将plus换为minus即可)
// 以小时为单位进行计算
LocalTime localTime10 = LocalTime.now().minusHours(3);
// 以分钟为单位进行计算
LocalTime localTime11 = LocalTime.now().minusMinutes(10);
// 以秒为单位进行计算
LocalTime localTime12 = LocalTime.now().minusSeconds(100);
4、计算时间间隔
LocalTime test = LocalTime.parse("20:10:10"); // 测试时间
// 1、通过Duration对象获取差值
Duration between = Duration.between(LocalTime.now(), test); // 通过Duration对象获取相差的时、分、秒
long l = between.toHours(); // -2
long l1 = between.toMinutes(); // -125
// 2、通过ChronoUnit对象获取差值
long between1 = ChronoUnit.HOURS.between(test, LocalTime.now()); // 2
long between2 = ChronoUnit.MINUTES.between(test, LocalTime.now()); // 125
// 3、通过LocalTime对象获取差值
int i2 = LocalTime.now().toSecondOfDay() - test.toSecondOfDay(); // 7541
5、通过特定格式进行时间转换
String format = LocalTime.now().format(DateTimeFormatter.ofPattern("mm:ss")); // 分:秒 20:19
6、修改时间
LocalTime localTime6 = LocalTime.now().withHour(10); // 10:20:49.860
LocalTime localTime7 = LocalTime.now().withMinute(0); // 22:00:51.277
LocalTime localTime8 = LocalTime.now().withSecond(0); // 22:20:00.975
LocalTime localTime9 = LocalTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0); // 00:00
LocalTime with = LocalTime.now().with(ChronoField.HOUR_OF_DAY, 20); // 20:24:51.351
注意事项:LocalTime对象有时候会将秒数进行省略
三、LocalDateTime对象用法(相关方法与上述一致)
1、LocalDateTime的创建方法
// 获取系统时间
LocalDateTime now = LocalDateTime.now(); // 2022-11-24T22:47:52.377
// 通过of方法进行创建
LocalDate localDate = LocalDate.now(); // 2022-11-24
LocalTime localTime = LocalTime.now(); // 22:47:52.377
// 通过LocalDate对象和LocalTime进行拼接
LocalDateTime of = LocalDateTime.of(localDate, localTime); // 2022-11-24T22:47:52.377
// 单个单位进行赋值
LocalDateTime of1 = LocalDateTime.of(2000, 1, 1, 0, 0); // 2000-01-01T00:00
// 通过字符串对象进行转换(注:日期和时间之间必须有分隔符”T“)
LocalDateTime parse = LocalDateTime.parse("2022-10-10T20:20:10"); // 2022-10-10T20:20:10
// 获取LocalDate对象和LocalTime对象
LocalDate localDate1 = parse.toLocalDate(); // 2022-10-10
LocalTime localTime1 = parse.toLocalTime(); // 20:20:10
2、进行格式转换
String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 2022-11-24 22:54:24
3、日期时间的运算
LocalDateTime now1 = LocalDateTime.now(); // 2022-11-24T23:00:03.823
// 以年为单位进行计算
LocalDateTime localDateTime = now1.plusYears(20); // 2042-11-24T23:00:03.823
// 以月为单位进行计算
LocalDateTime localDateTime1 = now1.plusMonths(10); // 2023-09-24T23:00:03.823
// 其余用法和上述一致
4、修改时间
// 通过with方法进行修改
LocalDateTime localDateTime2 = LocalDateTime.now().withYear(2000).withMonth(10); // 2000-10-01T23:03:58.885
// 本月第一天
LocalDateTime time = LocalDateTime.now().with(TemporalAdjusters.firstDayOfMonth()); // 2022-11-01T23:11:08.108
// 本月最后一天
LocalDateTime with = LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()); // 2022-11-30T23:07:34.711
// 本月第一个周一
LocalDateTime with1 = LocalDateTime.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2022-11-07T23:11:08.108
5、日期判断
LocalDateTime now2 = LocalDateTime.now(); // 2022-11-24T23:15:56.740
LocalDateTime of2 = LocalDateTime.of(2020, 10, 1, 20, 20); // 2020-10-01T20:20
boolean before = now2.isBefore(of2); // false
boolean after = now2.isAfter(of2); // true
boolean equals = now2.equals(of2); // false
6、日期差值计算
// 通过Duration对象进行计算
LocalDateTime now3 = LocalDateTime.now();
LocalDateTime of3 = LocalDateTime.of(2020, 6, 1, 20, 20);
Duration between = Duration.between(now3, of3);
long l = between.toDays(); // -906
long l1 = between.toHours(); // -21746