如何检查NSDate是否属于NSMutableArray中的两个其他NSDate之间

时间:2011-03-14 00:31:14

标签: iphone objective-c cocoa-touch

在我的应用程序中,我有一个NSMutableArray,用户可以通过添加或删除数组中的条目来修改(btw条目总是在索引0处添加),这是使用表视图完成的。数组存储中的每个条目是作为NSString添加单元格的日期是这种格式:即@"Sat, Mar 12, 2011"。假设我也创建了一个变量NSString *myDay = @"Thu";

我的问题是如何检查在索引0处存储的日期与索引1处存储的日期之间,myDay所代表的日期缺失或不在这两个日期之间。在我的情况下,我只需要通过比较数组的索引0和1来进行此检查。

另请注意,在我的应用程序中,变量myDay不是特定日期(即@“Thu,2011年3月10日”,它只代表用户选择的一周中的某一天,我的应用程序中的某些数据将需要每周重置一次。

2 个答案:

答案 0 :(得分:3)

NSDateComponents和NSCalendar允许您在NSDates上执行此类逻辑。

如果您在应用中将日期建模为字符串,则需要先将它们转换为NSDates。更好的方法是将日期建模为NSDates,并使用格式化程序将它们转换为字符串以便在表格中显示。

答案 1 :(得分:1)

您可以将日期放入数组并对此数组进行排序。比你检查,如果这些不同日期的索引,看看,如果一个日期介于其他日期之间:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *comps1 = [[NSDateComponents alloc] init];
NSDateComponents *comps2 = [[NSDateComponents alloc] init];
NSDateComponents *comps3 = [[NSDateComponents alloc] init];

[comps1 setDay:10];
[comps2 setDay:12];
[comps3 setDay:11];

NSDate *day1 = [gregorian dateByAddingComponents:comps1 toDate:[NSDate date] options:0];
NSDate *day2 = [gregorian dateByAddingComponents:comps2 toDate:[NSDate date] options:0];
NSDate *day3 = [gregorian dateByAddingComponents:comps3 toDate:[NSDate date] options:0];

NSMutableArray *array = [NSMutableArray arrayWithObjects:day1, day2, day3, nil];


[array sortUsingSelector:@selector(compare:)];

NSUInteger indexOfDay1 = [array indexOfObject:day1];
NSUInteger indexOfDay2 = [array indexOfObject:day2];
NSUInteger indexOfDay3 = [array indexOfObject:day3];

if (((indexOfDay1 < indexOfDay2 ) && (indexOfDay2 < indexOfDay3)) || 
    ((indexOfDay1 > indexOfDay2 ) && (indexOfDay2 > indexOfDay3))) {
    NSLog(@"YES");
} else {
    NSLog(@"NO");
}



[comps1 release];
[comps2 release];
[comps3 release];
[gregorian release];