将 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.2017
和31.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 原始类型的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章