将 Java 8 中两个日期的差值(天数)作为 Short 原始类型的最简单方法

Posted

技术标签:

【中文标题】将 Java 8 中两个日期的差值(天数)作为 Short 原始类型的最简单方法【英文标题】:Simplest way to get the difference (amount of days) of two dates in Java 8 as a Short primitive type 【发布时间】:2017-05-24 11:43:11 【问题描述】:

例如24.05.201731.05.2017的区别 应该是7

我在正确的道路上吗?

private short differenceOfBillingDateAndDueDate(Date billingDate, Date dueDate) 

    LocalDate billingLocalDate = billingDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

    LocalDate dueLocalDate = dueDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

    return (short) ChronoUnit.DAYS.between(billingLocalDate,dueLocalDate);

【问题讨论】:

【参考方案1】:

看起来不错 - 但无论如何您都在使用系统时区,您可以跳过它。直接使用 Instant 也可以 - 无需先转换为 LocalDate。您还可以跳过局部变量并立即执行 Date 到 Instant 的转换:

public static short differenceOfBillingDateAndDueDate(Date billingDate, Date dueDate) 
    return (short)ChronoUnit.DAYS.between(
              billingDate.toInstant()
             ,dueDate.toInstant());

甚至更短:

public static short differenceOfBillingDateAndDueDate(Date billingDate, Date dueDate) 
    return (short)billingDate.toInstant().until(dueDate.toInstant(), ChronoUnit.DAYS);

【讨论】:

【参考方案2】:

是的,你是在正确的方式!

由于您要求使用 java8,因此您可以使用 LocalDate 和 ChronoUnit

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(2000, Month.JANUARY, 1);
long period = ChronoUnit.DAYS.between(today, birthday);

System.out.println(period);

【讨论】:

以上是关于将 Java 8 中两个日期的差值(天数)作为 Short 原始类型的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

js计算两个日期间的所有日期

linq to sql 如何返回两个日期的天数差值

日期差值

日期差值

1096.日期差值

牛客-日期差值