【发布时间】:2014-02-04 07:35:33
【问题描述】:
我正在使用以下代码来比较两个 NSDates。结果稍后用于瞬态属性以组织表格视图部分中的对象。我可以保证核心数据存储中有足够的对象,因此三个可能的结果都存在,但 NSLog 显示选项 tmp = @"1", 永远不会被抛出。
-(NSString *)sectionIdentifier{
[self willAccessValueForKey:@"sectionIdentifier"];
NSString *tmp = [self primitiveValueForKey:@"sectionIdentifier"];
[self didAccessValueForKey:@"sectionIdentifier"];
if (!tmp){
NSDate *date = self.todoDueDate;
NSDate *todayDate = [NSDate date];
NSLog(@"date= %@",date);
NSLog(@"todayDate = %@",todayDate);
if([date
compare:todayDate] == NSOrderedSame) {
tmp = @"1";//TODAY
}
else if([date
compare:todayDate] == NSOrderedDescending){
tmp = @"2";//OVERDUE
}
else if ([date
compare:todayDate] == NSOrderedAscending){
tmp =@"0";//UPCOMING
}
NSLog(@"Tmp= %@",tmp);
[self setPrimitiveValue:tmp forKey:@"sectionIdentifier"];
}
这里是日志:
2014-01-15 10:10:52.732 To-Do Pro Light[21458:a0b] date = 2014-01-10 19:53:19 +0000
2014-01-15 10:10:52.735 To-Do Pro Light[21458:a0b] todayDate = 2014-01-15 17:10:52 +0000
2014-01-15 10:10:52.742 To-Do Pro Light[21458:a0b] Tmp= 0
2014-01-15 10:10:52.743 To-Do Pro Light[21458:a0b] date = 2014-01-14 17:45:45 +0000
2014-01-15 10:10:52.746 To-Do Pro Light[21458:a0b] todayDate = 2014-01-15 17:10:52 +0000
2014-01-15 10:10:52.747 To-Do Pro Light[21458:a0b] Tmp= 0
2014-01-15 10:10:52.748 To-Do Pro Light[21458:a0b] date = 2014-01-14 17:57:44 +0000
2014-01-15 10:10:52.749 To-Do Pro Light[21458:a0b] todayDate = 2014-01-15 17:10:52 +0000
2014-01-15 10:10:52.751 To-Do Pro Light[21458:a0b] Tmp= 0
2014-01-15 10:10:52.753 To-Do Pro Light[21458:a0b] date = 2014-01-15 16:31:48 +0000
2014-01-15 10:10:52.755 To-Do Pro Light[21458:a0b] todayDate = 2014-01-15 17:10:52 +0000
2014-01-15 10:10:52.756 To-Do Pro Light[21458:a0b] Tmp= 0
2014-01-15 10:10:52.758 To-Do Pro Light[21458:a0b] date = 2014-01-15 16:32:06 +0000
2014-01-15 10:10:52.759 To-Do Pro Light[21458:a0b] todayDate = 2014-01-15 17:10:52 +0000
2014-01-15 10:10:52.761 To-Do Pro Light[21458:a0b] Tmp= 0
2014-01-15 10:10:52.762 To-Do Pro Light[21458:a0b] date = 2014-01-15 17:03:40 +0000
2014-01-15 10:10:52.763 To-Do Pro Light[21458:a0b] todayDate = 2014-01-15 17:10:52 +0000
2014-01-15 10:10:52.764 To-Do Pro Light[21458:a0b] Tmp= 0
2014-01-15 10:10:52.766 To-Do Pro Light[21458:a0b] date = 2014-01-15 18:33:48 +0000
2014-01-15 10:10:52.767 To-Do Pro Light[21458:a0b] todayDate = 2014-01-15 17:10:52 +0000
2014-01-15 10:10:52.768 To-Do Pro Light[21458:a0b] Tmp= 2
我做错了什么?
【问题讨论】:
-
您日志中的所有
NSDate对象都不相同。为什么你希望看到Tmp= 1?请记住,时间(以毫秒计)包含在比较中。 -
以及如何在不考虑时间的情况下比较日期,只考虑年月日?
-
@mvasco:NSDateComponents 可以在这里提供帮助。
-
你永远不会得到完全匹配,因为两个 NSDate 对象必须在当天引用相同的 MILLISECOND 才能发生。最简单的是使用 NSDateFormatter 将日期格式化为 yyyy/MM/dd 并比较字符串。
-
@HotLicks,请将您的评论放在答案中,让我将其作为选定答案进行检查。我将使用 NSDataFormatter 更改我的代码。谢谢。