Java8 时间获取时间差
汇总
LocalDateTime now = LocalDateTime.now();
LocalDateTime time1 = now.minusDays(96L);
LocalDateTime time2 = now.plusMonths(2L).plusDays(3L).plusMinutes(6L).plusHours(6L).plusSeconds(6L);
LocalDateTime time3 = now.plusMonths(4L).plusDays(3L).plusYears(1L);
LocalDateTime time4 = now.plusMonths(4L).plusDays(3L).plusYears(8L);
System.out.println(String.format("now :%s", now));
System.out.println(String.format("time1:%s", time1));
System.out.println(String.format("time2:%s", time2));
System.out.println(String.format("time3:%s", time3));
System.out.println(String.format("time4:%s%s", time4, "\n"));
// now :2022-01-12T15:21:59.672
// time1:2021-10-08T15:21:59.672
// time2:2022-03-15T21:28:05.672
// time3:2023-05-15T15:21:59.672
// time4:2030-05-15T15:21:59.672
// Duration
// time1:2021-10-08T15:21:59.672,time2:2022-03-15T21:28:05.672
System.out.println(String.format("time2与time1相差{ %d }ms", Duration.between(time1, time2).toMillis()));
System.out.println(String.format("time2与time1相差{ %d }s", Duration.between(time1, time2).getSeconds()));
System.out.println(String.format("time2与time1相差{ %d }分钟", Duration.between(time1, time2).toMinutes()));
System.out.println(String.format("time2与time1相差{ %d }h", Duration.between(time1, time2).toHours()));
System.out.println(String.format("time2与time1相差{ %d }天%s", Duration.between(time1, time2).toDays(), "\n"));
// time2与time1相差{ 13673166000 }ms
// time2与time1相差{ 13673166 }s
// time2与time1相差{ 227886 }分钟
// time2与time1相差{ 3798 }h
// time2与time1相差{ 158 }天
// Period
// time2:2022-03-15T21:28:05.672,time3:2023-05-15T15:21:59.672
System.out.println(String.format("time3与time2相差{ %d }天", Period.between(time2.toLocalDate(), time3.toLocalDate()).getDays()));
System.out.println(String.format("time3与time2相差{ %d }月", Period.between(time2.toLocalDate(), time3.toLocalDate()).getMonths()));
System.out.println(String.format("time3与time2相差{ %d }年%s", Period.between(time2.toLocalDate(), time3.toLocalDate()).getYears(), "\n"));
// time3与time2相差{ 0 }天
// time3与time2相差{ 2 }月
// time3与time2相差{ 1 }年
// time2:2022-03-15T21:28:05.672,time4:2030-05-15T15:21:59.672
System.out.println(String.format("time4与time2相差{ %d }天", Period.between(time2.toLocalDate(), time4.toLocalDate()).getDays()));
System.out.println(String.format("time4与time2相差{ %d }月", Period.between(time2.toLocalDate(), time4.toLocalDate()).getMonths()));
System.out.println(String.format("time4与time2相差{ %d }年%s", Period.between(time2.toLocalDate(), time4.toLocalDate()).getYears(), "\n"));
// time4与time2相差{ 0 }天
// time4与time2相差{ 2 }月
// time4与time2相差{ 8 }年
// time2:2022-03-15T21:28:05.672,time4:2030-05-15T15:21:59.672
System.out.println(String.format("time2与time4相差{ %d }天", Period.between(time4.toLocalDate(), time2.toLocalDate()).getDays()));
System.out.println(String.format("time2与time4相差{ %d }月", Period.between(time4.toLocalDate(), time2.toLocalDate()).getMonths()));
System.out.println(String.format("time2与time4相差{ %d }年", Period.between(time4.toLocalDate(), time2.toLocalDate()).getYears()));
// time2与time4相差{ 0 }天
// time2与time4相差{ -2 }月
// time2与time4相差{ -8 }年
// ChronoUnit
// time2:2022-03-15T21:28:05.672,time3:2023-05-15T15:21:59.672
System.out.println(String.format("time3与time2相差{ %d }ms", ChronoUnit.MILLIS.between(time2, time3)));
System.out.println(String.format("time3与time2相差{ %d }s", ChronoUnit.SECONDS.between(time2, time3)));
System.out.println(String.format("time3与time2相差{ %d }min", ChronoUnit.MINUTES.between(time2, time3)));
System.out.println(String.format("time3与time2相差{ %d }h", ChronoUnit.HOURS.between(time2, time3)));
System.out.println(String.format("time3与time2相差{ %d }天", ChronoUnit.DAYS.between(time2, time3)));
System.out.println(String.format("time3与time2相差{ %d }周", ChronoUnit.WEEKS.between(time2, time3)));
System.out.println(String.format("time3与time2相差{ %d }月", ChronoUnit.MONTHS.between(time2, time3)));
System.out.println(String.format("time3与time2相差{ %d }年%s", ChronoUnit.YEARS.between(time2, time3), "\n"));
// time3与time2相差{ 36784434000 }ms
// time3与time2相差{ 36784434 }s
// time3与time2相差{ 613073 } min
// time3与time2相差{ 10217 }h
// time3与time2相差{ 425 }天
// time3与time2相差{ 60 }周
// time3与time2相差{ 13 }月
// time3与time2相差{ 1 }年
// time2:2022-03-15T21:28:05.672,time4:2030-05-15T15:21:59.672
System.out.println(String.format("time4与time2相差{ %d }ms", ChronoUnit.MILLIS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }s", ChronoUnit.SECONDS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }min", ChronoUnit.MINUTES.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }h", ChronoUnit.HOURS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }天", ChronoUnit.DAYS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }周", ChronoUnit.WEEKS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }月", ChronoUnit.MONTHS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }年", ChronoUnit.YEARS.between(time2, time4)));
// time4与time2相差{ 257709234000 }ms
// time4与time2相差{ 257709234 }s
// time4与time2相差{ 4295153 } min
// time4与time2相差{ 71585 }h
// time4与time2相差{ 2982 }天
// time4与time2相差{ 426 }周
// time4与time2相差{ 97 }月
// time4与time2相差{ 8 }年
注意点
1、时间一样
LocalDateTime now = LocalDateTime.now();
LocalDateTime time2 = now.plusMonths(2L).plusDays(3L);
LocalDateTime time4 = now.plusMonths(4L).plusDays(3L).plusYears(1L);
System.out.println(String.format("now :%s", now));
System.out.println(String.format("time2:%s", time2));
System.out.println(String.format("time4:%s%s", time4, "\n"));
// now :2022-01-12T15:42:27.806
// time2:2022-03-15T15:42:27.806
// time4:2023-05-15T15:42:27.806
// Duration
// time2:2022-03-15T15:42:27.806,time4:2023-05-15T15:42:27.806
System.out.println(String.format("time2与time1相差{ %d }ms", Duration.between(time2, time4).toMillis()));
System.out.println(String.format("time2与time1相差{ %d }s", Duration.between(time2, time4).getSeconds()));
System.out.println(String.format("time2与time1相差{ %d }分钟", Duration.between(time2, time4).toMinutes()));
System.out.println(String.format("time2与time1相差{ %d }h", Duration.between(time2, time4).toHours()));
System.out.println(String.format("time2与time1相差{ %d }天%s", Duration.between(time2, time4).toDays(), "\n"));
// time2与time1相差{ 36806400000 }ms
// time2与time1相差{ 36806400 }s
// time2与time1相差{ 613440 }分钟
// time2与time1相差{ 10224 }h
// time2与time1相差{ 426 }天
// ChronoUnit
// time2:2022-03-15T15:42:27.806,time4:2023-05-15T15:42:27.806
System.out.println(String.format("time4与time2相差{ %d }ms", ChronoUnit.MILLIS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }s", ChronoUnit.SECONDS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }min", ChronoUnit.MINUTES.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }h", ChronoUnit.HOURS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }天", ChronoUnit.DAYS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }周", ChronoUnit.WEEKS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }月", ChronoUnit.MONTHS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }年", ChronoUnit.YEARS.between(time2, time4)));
// time4与time2相差{ 36806400000 }ms
// time4与time2相差{ 36806400 }s
// time4与time2相差{ 613440 } min
// time4与time2相差{ 10224 }h
// time4与time2相差{ 426 }天
// time4与time2相差{ 60 }周
// time4与time2相差{ 14 }月
// time4与time2相差{ 1 }年
2、结束时间少1s
LocalDateTime now = LocalDateTime.now();
LocalDateTime time2 = now.plusMonths(2L).plusDays(3L);
LocalDateTime time4 = now.plusMonths(4L).plusDays(3L).plusYears(1L).minusSeconds(1L);
System.out.println(String.format("now :%s", now));
System.out.println(String.format("time2:%s", time2));
System.out.println(String.format("time4:%s%s", time4, "\n"));
// now :2022-01-12T15:45:58.941
// time2:2022-03-15T15:45:58.941
// time4:2023-05-15T15:45:57.941
// Duration
// time2:2022-03-15T15:45:58.941,time4:2023-05-15T15:45:57.941
System.out.println(String.format("time4与time2相差{ %d }ms", Duration.between(time2, time4).toMillis()));
System.out.println(String.format("time4与time2相差{ %d }s", Duration.between(time2, time4).getSeconds()));
System.out.println(String.format("time4与time2相差{ %d }分钟", Duration.between(time2, time4).toMinutes()));
System.out.println(String.format("time4与time2相差{ %d }h", Duration.between(time2, time4).toHours()));
System.out.println(String.format("time4与time2相差{ %d }天%s", Duration.between(time2, time4).toDays(), "\n"));
// time2与time1相差{ 36806399000 }ms
// time2与time1相差{ 36806399 }s
// time2与time1相差{ 613439 }分钟
// time2与time1相差{ 10223 }h
// time2与time1相差{ 425 }天
// ChronoUnit
// time2:2022-03-15T15:45:58.941,time4:2023-05-15T15:45:57.941
System.out.println(String.format("time4与time2相差{ %d }ms", ChronoUnit.MILLIS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }s", ChronoUnit.SECONDS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }min", ChronoUnit.MINUTES.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }h", ChronoUnit.HOURS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }天", ChronoUnit.DAYS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }周", ChronoUnit.WEEKS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }月", ChronoUnit.MONTHS.between(time2, time4)));
System.out.println(String.format("time4与time2相差{ %d }年", ChronoUnit.YEARS.between(time2, time4)));
// time4与time2相差{ 36806399000 }ms
// time4与time2相差{ 36806399 }s
// time4与time2相差{ 613439 } min
// time4与time2相差{ 10223 }h
// time4与time2相差{ 425 }天
// time4与time2相差{ 60 }周
// time4与time2相差{ 13 }月
// time4与time2相差{ 1 }年
可以看到月数差比之前少了1个月,其他如:秒、分、时、日都少
1
了