[英]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#before或Calendar#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));
LocalDate.of( 2010 , 1 , 20 )
.isBefore(
LocalDate.of( 2014 , 2 , 30 )
)
真正
您在錯誤的類上使用了錯誤的方法。
Calendar
類代表日期和時間。 但是,您需要沒有日期的僅日期值。
您呼叫的compareTo
這是由特定的接口定義的方法Comparable
具有特定的用途。 此方法旨在返回整數,而您需要布爾值“ isBefore”或“ isAfter”。
同樣,麻煩的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 8及更高版本中。 這些類取代了麻煩的舊的舊式日期時間類,例如java.util.Date
, Calendar
和SimpleDateFormat
。
現在處於維護模式的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.