2015-04-17 37 views
-1

有一個名爲Place的對象。用戶可以將位置添加到收藏夾,用戶也可以從收藏夾中移除位置。一旦用戶添加到收藏夾,我將日期保存在數據庫中。當用戶從收藏中刪除我從數據庫中檢索日期。並將特定對象與對象數組進行比較。但是當比較相同的對象時,它給NSOrderedAscending。NSComparisonResult failed相同NSDate

NSDate *date1 = obj1.date; // same date 
NSDate *date2 = obj2.date; // same date 
// compare using date 
NSComparisonResult result = [date2 compare:date1]; 

任何幫助將不勝感激。謝謝。

+1

這些日期可能有不同的毫秒值? – VladZ

+0

確實;調試器正在四捨五入到最接近的秒鐘。 – trojanfoe

+0

我會把日期記錄到控制檯,可能有更多的信息沒有顯示給你,你正在檢查日期的方式。 –

回答

0

,然後得到的秒數,因爲一些劃時代和四捨五入的小數部分:

BOOL same = round([date1 timeIntervalSince1970]) == 
      round([date2 timeIntervalSince1970]); 

或轉換爲整數:

BOOL same = (unsigned long)[date1 timeIntervalSince1970] == 
      (unsigned long)[date2 timeIntervalSince1970]; 

(如果您願意,也可以使用[NSDate timeIntervalSinceReferenceDate])。

+0

我懷疑有一個復仇​​downvoting正在進行。 – gnasher729

+0

@ gnasher729由誰?我沒有在這裏低估任何人。 – trojanfoe

+0

我已經投下了不正確的答案,然後有人投下了所有正確的答案。 – gnasher729

-1

NSDate的不只是包含一天秒,它的分辨率高於微秒更好。你的NSDates可能相差幾分之一秒。嘗試記錄[date1 timeIntervalSinceDate:date2]。

所以最有可能你的日期不一樣。如果要排序的日期,以及你想有認爲等於相同秒內的日期,取

double seconds1 = round ([date1 timeIntervalSinceReferenceDate]); 
double seconds2 = round ([date2 timeIntervalSinceReferenceDate]); 

這需要在日期的時間和它四捨五入爲最接近第二,和比較這些值。

1

試着這樣做:如果你要比較兩個日期都相當於同第二

-(NSDate *)clearSecondsFromDate:(NSDate *)date 
{ 
NSTimeInterval timeInterval = [date timeIntervalSinceReferenceDate]; 
timeInterval -= fmod(timeInterval, 60); 
NSDate *clearDate = [NSDate dateWithTimeIntervalSinceReferenceDate:: timeInterval]; 
return clearDate; 
} 
+0

哇!這是一種魅力。感謝您的快速回復@VladZ – user2160335

+0

@ user2160335您是否正確測試了這段代碼?你想從日期中刪除秒嗎? – trojanfoe

+0

@trojanfoe這對我來說很好。因爲我首先比較日期。如果訂單相同,那麼我將與Id進行比較。無論如何,在我的應用程序不能在同一秒添加兩個日期。所以這不會是一個問題。 – user2160335