我不明白 LocalDate#compareTo() Java 方法 return 值

I don't understand LocalDate#compareTo() Java method return value

我正在尝试通过 Java 和 LocalDate class 来熟练掌握日期,但是我对 compareTo 方法 return 的值有些不了解.

我认为我正在使用的 nextDate.compareTo(previousDate) 会 return:

但我认为可以肯定地说 >0 return 值和 <0 值是以天为单位的时间跨度,等于 nextDate - previousDate。

例如(yyyy-MM-dd):

根据以下测试,这并不总是正确的,我不明白为什么。

package com.mycompany.provalocaldatenuovo;

import java.time.LocalDate;

public class UI {

    public static void main(String args[]) {

        // Test 1
        LocalDate previousDate1 = LocalDate.of(2030, 01, 01);
        LocalDate nextDate1 = LocalDate.of(2030, 01, 31);

        // Test 2
        LocalDate previousDate2 = LocalDate.of(2030, 01, 01);
        LocalDate nextDate2 = LocalDate.of(2030, 01, 03);

        // Test 3
        LocalDate previousDate3 = LocalDate.of(2030, 01, 31);
        LocalDate nextDate3 = LocalDate.of(2030, 02, 03);

        // Test 4
        LocalDate previousDate4 = LocalDate.of(2030, 1, 31);
        LocalDate nextDate4 = LocalDate.of(2030, 1, 31);

        // Test 1 - expected 30
        System.out.println("TEST 1: " + nextDate1.compareTo(previousDate1));

        // Test 2 - expected 2
        System.out.println("TEST 2: " + nextDate2.compareTo(previousDate2));

        // Test 3 - expected 3
        System.out.println("TEST 3: " + nextDate3.compareTo(previousDate3));

        // Test 4 - expected 0
        System.out.println("TEST 4: " + nextDate4.compareTo(previousDate4));
    }
}

输出:

TEST 1: 30
TEST 2: 2
TEST 3: 1    //??? doesn't matter which day on february is, this will result 1
TEST 4: 0

你知道TEST3是怎么回事吗?

猜测,这里发生的事情是 returning:

  • 年份不同则年份不同;
  • 年份相同但月份不同时的月份差;
  • 如果年和月相等,则天数相差。

然而,这并不重要:关于 return 值,您唯一应该考虑的是 它的符号 :

  • 负数表示 a < b;
  • 零表示 a == b;
  • 正数表示a > b.

确切的值本身(零除外)完全无关紧要,如果内部实现发生变化,则可能会发生变化。您应该只将 compareTo(或 compare)的结果与零进行比较,例如result < 0, result >= 0


LocalDate(以及其他 java.time 类)的特定情况下,提供了使检查意图更加明显的方法:

选择哪种取决于您(或您的团队风格)。