2013-11-02 60 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谨慎解释我的答案有什么问题,以便我可以改进它? –