我是ios的新手,我想知道如何从NSMutableArray的日期(作为字符串)提取该数组中的所有星期日。
从我的研究到目前为止,我发现我必须从今天开始,就像这样
NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
然后"选择"这样的星期天
NSDateComponents *dateComponents = [calendar components:NSWeekdayCalendarUnit | NSHourCalendarUnit fromDate:now];
NSInteger weekday = [dateComponents 1]; // 1 is sunday right ?!
然后回到过去,每个星期天都把日期放在一个新的数组中。
NSDate *dateRelease;
NSDateFormatter *dateFormatter = [ [ NSDateFormatter alloc ] init ];
[ dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"] ];
[ dateFormatter setDateFormat:@"yyyy-MM-dd" ];
for (int i = [ dateFormatter dateFromString:[[[[DessinsManager sharedInstance]imagesList].count ; i > 0; i--){
dateRelease = [ dateFormatter dateFromString:[[[[DessinsManager sharedInstance]imagesList] objectAtIndex:i]dateDrawing] ];
//Check for the sundays here
if ( [now compare: dateRelease] == NSOrderedDescending ) {
//if sundays put in new array
} else {
//if not sundays then go on with loop
}
}
为此,我对如何进行比较以获得星期日(我的阵列从2013年11月1日到今天)感到有点困惑......
感谢您的帮助
V.v
答案 0 :(得分:0)
您应该使用- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate
方法,该方法返回一个新数组,用谓词评估原始对象中的每个对象。
这样的谓词可以使用+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block
构建,也可能来自Dave DeLong's answer here的一些灵感来识别被评估的日子。
答案 1 :(得分:0)
首先将日期存储为NSDate
个对象,因为您应始终使用最合适的数据类型存储数据:
NSArray *datesAsStrings = ...;
NSMutableArray *dates = [NSMutableArray new];
NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
dateFormatter.dateFormat = @"yyyy-MM-dd";
for (NSString *dateStr in datesAsStrings) {
NSDate *date = [dateFormatter dateFromString:dateStr];
[dates addObject:dates];
}
然后过滤掉星期日:
NSMutableArray *sundays = [NSMutableArray new];
[dates enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop)) {
NSDate *date = (NSDate *)obj;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:NSWeekdayCalendarUnit
fromDate:date];
if (comps.weekday == 1)
[sundays addObject:date];
}];