【问题标题】:java chrono unit difference between yearjava chrono 年份之间的单位差异
【发布时间】:2021-10-07 03:55:14
【问题描述】:

我有下面的代码来获得两年之间的差异..

long yearsBetween = ChronoUnit.YEARS.between(
                customDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
                LocalDate.now());

我的日期值如下

customDate = 2022-03-07
LocalDate.now() = 2021-10-07

但是当我执行 ChronoUnit.YEARS.between 时,它返回 "0",但我期待 "1" 作为返回值。我只想比较给定日期的年份并得到差异,不包括天数..

【问题讨论】:

  • 您给出的日期仅相隔 5 个月。您是否希望它只考虑日期的年份部分?所以 2021-12-31 和 2022-01-01 将相隔 1 年,但 2022-01-01 和 2022-12-31 将相隔 0 年?你的这部分问题可以说得更清楚。
  • 我已经提到,我只需要比较有问题的年份而不是日期..
  • 知道了,我只是对措辞有点困惑。谢谢你的澄清。

标签: java java-time chronounit


【解决方案1】:

如果您想忽略 LocalDate 的月份和日期部分,您可以从每个 LocalDate 中获取年份,然后比较它们,如下所示:

// Let's say we have two LocalDates, date1 and date2:
LocalDate date1 = LocalDate.of(2021, 10, 6);
LocalDate date2 = LocalDate.of(2022, 3, 7);

// We can get the year for each object and then subtract the two years:
long yearsBetween = date2.getYear() - date1.getYear();

// This will print 1 because 2022 is 1 year ahead of 2021:
System.out.println(yearsBetween);

附带说明,yearsBetween 不需要是长数据类型(64 位整数)。 getYear() 方法返回一个 int(32 位整数),我怀疑您是否需要处理那么远的未来几年。我们可以使用:

int yearsBetween = date2.getYear() - date1.getYear();

然后您可以在date1date2 的位置插入您的日期:

int yearsBetween = customDate.toInstant().atZone(ZoneId.systemDefault())
        .toLocalDate().getYear()
        - LocalDate.now().getYear();

【讨论】:

  • 比较 date.getYear() 并获得差异是我所做的..这行得通..谢谢..
  • 无需绕道LocalDateint yearsBetween = customDate.toInstant() .atZone(ZoneId.systemDefault()).getYear() - Year.now().getValue(); 另一种可能是long yearsBetween2 = Year.now().until( customDate.toInstant().atZone(ZoneId.systemDefault()), ChronoUnit.YEARS);
猜你喜欢
  • 2015-10-17
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 2017-10-20
  • 1970-01-01
相关资源
最近更新 更多