【发布时间】:2022-02-04 11:40:13
【问题描述】:
我正在尝试通过 Java 和 LocalDate 类来熟练掌握日期,不过,对于 compareTo 方法的返回值,我有些不明白。
我认为我正在使用的 nextDate.compareTo(previousDate) 会返回:
- 0 当日期相同时
- > 当参数早于调用方法的日期时为 0
但我认为可以肯定地说 >0 返回值和
例如(yyyy-MM-dd):
- 2030/01/31 - 2030/01/01 = 30
- 2030/01/03 - 2030/01/01 = 2
- 2030/02/03 - 2030/01/31 = 3
根据以下测试,这并不总是正确的,我不明白为什么。
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 发生了什么吗?
【问题讨论】:
-
返回值本身是完全不相关的,除了它是否等于、大于或小于零。
-
“但我认为可以肯定地说......”不,不是。
-
安迪是对的。如果要获取两个
LocalDate实例之间的天数,请使用firstDate.until(secondDate)或Period.between(firstDate, secondDate)。 -
您的 Localdate.compareTo() 正在比较并返回它得到的第一个差异。如果您更改年份,您将获得年份的差异。如果您保持年份不变并更改月份,您将得到月份的差异(这就是测试 3 中发生的情况)。如果您在两个日期中保持年份和月份相同,则日期将相同。
-
@RobSpoor 谢谢你的提示:这实际上解决了我在一个更大的应用程序中的问题