簡體   English   中英

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

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

我正在嘗試使用 Java 和 LocalDate class 來熟練掌握日期,不過,對於 compareTo 方法的返回值,我有些不明白。

我認為我正在使用的nextDate.compareTo(previousDate)會返回:

  • 0 日期相同時
  • > 0 當參數在調用方法的日期之前
  • < 0 當參數在調用方法的日期之后

但我認為可以肯定地說 >0 返回值和 <0 值是以天為單位的時間跨度,等於 nextDate - previousDate。

例如(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));
    }
}

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類)的特定情況下,提供了一些方法來使檢查的意圖更加明顯:

這取決於您(或您的團隊風格)喜歡哪個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM