簡體   English   中英

Java / Android:逐字比較2個Calendar對象的日期

[英]Java/Android: Literally Compare date of 2 Calendar objects

我正在嘗試比較2個日歷對象及其日期。

我的代碼:

Calendar c1 = Calendar.getInstance(); 
Calendar c2 = Calendar.getInstance(); 

c1.set(2017, 1,2); 
c2.set(2017, 1,1); 

int compared = c1.compareTo(c2);

textView.setText("" + compared);

結果應為-1或1的整數,在我的情況下應為:-1。

但是,這不是我想要的結果。 我希望能夠直接比較日期說:

01/20/2010 compared to 02/30/2014 returns true or false. 

是否有一些方法可以基於Calendar lib實現此目的?

我知道內置方法,例如getDay(),getMonth(),equals()等。 問題是在使用getDay(),getMonth(),getYear()時,很難進行比較,因為我正在3個整數之間進行比較。

另外,我感覺到要在兩個日期之間進行比較,我必須將時區和timeinMillis設置為相同。 意思是直接比較日期,對於cal1和cal2,其時區和timeinmillis必須相同。

有人可以向我澄清嗎?

概念的角度來看,您應該注意這一點:compareTo()具有返回int的非常具體的含義,其-1,0,1結果告訴您如何對比較對象進行排序。

您正在尋找的布爾結果表明您應該使用等於,之前或之后的動詞來思考/說話!

定義明確的概念是一個壞主意,要保留名稱但要改變其含義!

您可以使用Calendar#beforeCalendar#after進行比較以返回boolean

SimpleDateFormat formatC1 = new SimpleDateFormat("yyyy-MM-dd");
String formattedC1 = formatC1.format(c1.getTime());
SimpleDateFormat formatC2 = new SimpleDateFormat("yyyy-MM-dd");
String formattedC2 = formatC2.format(c2.getTime());
textView.setText(formattedC1 + " compared to " + formattedC2 + " returns " + c1.before(c2));

TL;博士

LocalDate.of( 2010 , 1 , 20 )
         .isBefore( 
             LocalDate.of( 2014 , 2 , 30 ) 
         )

真正

細節

您在錯誤的類上使用了錯誤的方法。

Calendar類代表日期時間。 但是,您需要沒有日期的僅日期值。

您呼叫的compareTo這是由特定的接口定義的方法Comparable具有特定的用途。 此方法旨在返回整數,而您需要布爾值“ isBefore”或“ isAfter”。

使用java.time

同樣,麻煩的Calendar類是現在遺留的舊的日期時間類之一,由java.time類取代。

LocalDate類表示沒有日期和時區的僅日期值。

LocalDate ld1 = LocalDate.of( 2010 , 1 , 20 ) ;
LocalDate ld2 = LocalDate.of( 2014 , 2 , 30 ) ;

與布爾方法比較。

boolean ld1IsBefore = ld1.isBefore( ld2 );
boolean ld1IsAfter = ld1.isAfter( ld2 );
boolean ld1IsEqual = ld1.isEqual( ld2 );

關於java.time

java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊的舊式日期時間類,例如java.util.DateCalendarSimpleDateFormat

現在處於維護模式Joda-Time項目建議遷移到java.time類。

要了解更多信息,請參見Oracle教程 並在Stack Overflow中搜索許多示例和說明。 規格為JSR 310

在哪里獲取java.time類?

你可以這樣

textView.setText("c1 compared to c2 returns " + (c1.compareTo(c2) == 0));

根據javadocs

比較兩個Calendar對象表示的時間值(距紀元的毫秒偏移量)。

測試

        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c2.add(Calendar.MINUTE, 1);

        System.out.println ("c1 compared to c2 returns " + (c1.compareTo(c2) == 0));

暫無
暫無

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

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