2013-11-02 96 views
2

基本上我有一天的小貼士,有與日期相關的特定提示,我需要一種方法來比較當前的NSDate與小費的保存日期,而不管時間如何。顯然,1月1日的提示在上午10點和10點30分相關,所以我不能字面上比較NSDates。下面是一些我嘗試過的事情:比較NSDates而不考慮時間

嘗試1 - 不工作

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]]; 
NSInteger day = [components day]; 
NSInteger month = [components month]; 
NSInteger year = [components year]; 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
// [df setDateFormat:@"yyyy-MM-dd hh:mm:ss a"]; 
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 

嘗試2 - 不工作

NSString * zoneString = [[NSString stringWithFormat:@"%i-%i-%iT00:00:00", year, month, day] substringFromIndex:([[NSString stringWithFormat:@"%i-%i-%iT00:00:00", year, month, day] length] - 5)]; 
NSTimeInterval timeInterval = [[zoneString substringToIndex:3] intValue] * 3600; 
timeInterval += [[zoneString substringFromIndex:3] intValue] * 60; 

NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeInterval]]; 
[formatter setDateFormat:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss ZZZ"]; 
NSLog(@"%@", [formatter stringFromDate:myDate]); 

嘗試3 - 不起作用

NSDate *date = [NSDate date]; 
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&date interval:NULL forDate:date]; 

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd"]; 

if ([[dateFormat stringFromDate:date] isEqualToString:[dateFormat stringFromDate:tipDate]]) 
+0

見加布裏埃爾的答案。我在應用程序中有類似的要求來檢查是否在同一日曆日期發生任意事件(基於時間),這正是我如何做到的。只需按日期組件匹配年,月和日即可比較。 – Bladebunny

+0

我在發帖前檢查了這個問題,並且解決方案不起作用 – Andrew

回答

1

作爲一個經驗法則,當您比較或操縱NSDate s時,作業的正確工具通常是NSCalendarNSDateComponents的組合。

僅當您需要格式化並顯示NSDate時才使用NSDateFormatter

考慮到這一點,NSDateComponents是要走的路,因爲你想比較兩個日期的組件子集。

創建兩個NSDateComponents實例並進行比較。

示例:以下

- (BOOL)isToday:(NSDate *)date { 
    NSDateComponents *todayComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit 
                     fromDate:[NSDate date]]; 
    NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit 
                     fromDate:date]; 
    return [dateComponents isEqual:todayComponents]; 
} 
+0

@downvoter謹慎解釋我的答案有什麼問題,以便我可以改進它? –