在我的应用程序中,我有一个NSMutableArray,用户可以通过添加或删除数组中的条目来修改(btw条目总是在索引0处添加),这是使用表视图完成的。数组存储中的每个条目是作为NSString添加单元格的日期是这种格式:即@"Sat, Mar 12, 2011"
。假设我也创建了一个变量NSString *myDay = @"Thu";
我的问题是如何检查在索引0处存储的日期与索引1处存储的日期之间,myDay所代表的日期缺失或不在这两个日期之间。在我的情况下,我只需要通过比较数组的索引0和1来进行此检查。
另请注意,在我的应用程序中,变量myDay不是特定日期(即@“Thu,2011年3月10日”,它只代表用户选择的一周中的某一天,我的应用程序中的某些数据将需要每周重置一次。
答案 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];