2012-06-11 79 views
0

我有一個實體,其屬性爲time,它的類型爲Date。我只關心它的時間部分。在生成類文件時,我選擇對基本數據類型使用標量屬性。因此,使用NSTimeInterval代替NSDate核心數據:基於NSDate的時間組件篩選條目

要存儲time屬性,我有它分配給實體之前解析與NSDateFormatter字符串:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"H:mm"]; 

NSTimeInterval time = [[dateFormatter dateFromString:@"19:20"] timeIntervalSince1970]; 
entity.time = time; 

當使用謂詞來獲取記錄,我再次使用NSDateFormatter爲「截斷」的日期成分:

NSDate *timeNow = [self.defaultDateFormatter dateFromString: 
    [self.defaultDateFormatter stringFromDate:[NSDate date]]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"time >= %@", timeNow]; 
// build the rest of the NSFetchRequest... 

的問題是,所有的記錄回來:一些記錄有time屬性timeNow之前,有些人後。 Bue當我使用[NSDate compare:]比較timeNow與返回記錄的time屬性時,它實際上返回了正確的結果!

哪裏出錯了?

+0

你爲什麼要在第二段代碼中對日期 - >字符串 - >日期進行雙向轉換? – Eimantas

+0

兩個原因:(1)使轉換與第一次插入數據庫時​​的轉換相同;(2)這是從1970年起基於時間間隔獲得時間分量的最快方式,這是時間間隔存儲在數據庫中。 –

回答

2

如果我理解的很好,你需要跟蹤H:mm的時間。日,月和年不感興趣。對?

爲什麼不使用int16_t如果你需要精細分辨率(最大1440)或int32_t如果你需要第二個分辨率(最大86400),以及一些非常基本的方法從基本單位轉換爲最適合你需要的東西用於NSCalendar計算的NSDateComponents? NSDate和NSTimeInterval不太適合這項任務,是嗎?