2012-06-29 35 views
1

搜索API正在以String格式返回日期,我想將該日期與當前日期進行比較並執行一些操作。我創建了一個日期對象並對其進行解析,但是當我進行比較時仍然出現錯誤。將字符串日期與當前較長時間進行比較

Calendar currentDate = Calendar.getInstance(); 
long dateNow = currentDate.getTimeInMillis(); 

String eventDate = meta.getString("startDate"); //This is the string API returns 

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS"); 
Date date = formatter.parse(eventDate); 
long modifiedDate= date.getTime(); 

if (dateNow.compareTo(modifiedDate)>0) { 
    //Do Something 
}        

錯誤我得到的是:

Cannot invoke compareTo(long) on the primitive type long 

感謝。

+0

什麼是錯誤,發佈您的logcat – rajpara

+0

您可以請發佈有關錯誤的詳細信息?你得到編譯錯誤或運行時異常? –

+0

是不是有一個原因會導致轉換爲'long's而不是僅僅使用'java.util.Date'定義的'before'和'after'方法? –

回答

5

在比較原始的long的只有我用香草比較運算符:

dateNow > modifiedDate 

不建議這樣做,但如果你想使用compareTo,首先轉換爲Long

Long.valueOf(dateNow).compareTo(Long.valueOf(modifiedDate)) > 0 
+1

是的,只因爲你*可以*做某事並不意味着你應該。是的,我沒有倒下......畢竟,你警告過。 – davidcesarino

1

compareTo方法是包裝類的一部分,long是原始數據類型 - 您不能在原始數據類型上調用方法。要麼長變長或直接比較long date like dateNow> modifiedDate

-2

compareTo是一種方法。它沒有爲原始類型long定義。它爲Date類定義的

Date dateNow = currentDate.getTime(); // instead of getTimeInMillis() 
... 
if (dateNow.compareTo(date)) { // this will now work 

如果它們都是Date對象,那麼可以做dateNow.before(date)這使得語義上更有意義。

或者,您可以使用>和<運算符,並在dateNow長的情況下使用dateNow < modifiedDate

+0

如果您不滿意,請說明原因。謝謝。 –

+0

基元不會從'Object'類型下降,因此它們不是典型的對象(學術,我知道)。最基本的後果之一是他們沒有自己的方法。由於'dateNow'是原始類型'long',所以這些代碼甚至不可能編譯...並且當您在此網站上提供代碼時,人們會非常敏感以至少需要您的代碼,至少,沒有像他們那樣明顯的錯誤......當有疑問時,不要急於嘗試獲得upvotes和綠色的蜱蟲。 – davidcesarino

+0

@ DavidCesarino-在上面的代碼中,我提到如果OP將dateNow更改爲* Date *對象,那麼他/她可以使用compareTo方法嗎?現在已經不是很久了。日曆getTime()返回Date,不久。 (您可能沒有刷新;當我意識到OP已將dateNow設置爲long而非Date時,我將該帖子更改爲10分鐘。) –

1

long爲基本類型,這意味着它是不是一個對象,並沒有像compareTo等基本方法可以進行數學運算,以他們雖然比較:

if (dateNow - modifiedDate > 0) /* dateNow is later than modifiedDate */ 

另一種解決方案是使用Long(大寫字母L)的一個對象。然後你可以使用compareTo

相關問題