Java8 时间获取时间差汇总及注意点

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值