[英]I don't understand LocalDate#compareTo() Java method return value
我正在嘗試使用 Java 和 LocalDate class 來熟練掌握日期,不過,對於 compareTo 方法的返回值,我有些不明白。
我認為我正在使用的nextDate.compareTo(previousDate)
會返回:
但我認為可以肯定地說 >0 返回值和 <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));
}
}
Output:
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發生了什么嗎?
猜測一下,這里發生的事情是它正在返回:
然而,這並不是很重要:關於返回值,你唯一應該考慮的是它的符號:
a < b
;a == b
;a > b
。 確切的值本身(除了零)是完全不相關的,並且如果內部實現發生變化,可能會發生變化。 您應該只將compareTo
(或compare
)的結果與零進行比較,例如result < 0, result >= 0
等。
在LocalDate
(和其他java.time
類)的特定情況下,提供了一些方法來使檢查的意圖更加明顯:
a.isBefore(b)
對應於a.compareTo(b) < 0
;a.isAfter(b)
對應於a.compareTo(b) > 0
。這取決於您(或您的團隊風格)喜歡哪個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.