从复杂的NSString中提取日期

我没有Xcode的能力来解决这个问题:

我有这个文字:

“402 Garcia 01/08/15 10:26 Observacionesdelhuésped”

我想提取我确定GMT + 0的日期,然后添加手机GMT例如GMT +1并将旧日期替换为NSString中的新日期。

GMT的东西,我刚刚在另一个地方解决它,所以我只需要提取并将日期字符串替换为字符串,所以我的最终结果将是这样的:

“402 Garcia 01/08/15 11:26 Observacionesdelhuésped”

任何帮助将不胜感激,并提前感谢。

这正是NSDataDetector的用途。

我在NSString的类别中创建了一个方法:

@interface NSString (HASAdditions) - (NSArray *)detectedDates; @end @implementation NSString (HASAdditions) - (NSArray *)detectedDates { NSError *error = nil; NSDataDetector *dateDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeDate error:&error]; if (!dateDetector) return nil; NSArray *matches = [dateDetector matchesInString:self options:kNilOptions range:NSMakeRange(0, self.length)]; NSMutableArray *dates = [[NSMutableArray alloc] init]; for (NSTextCheckingResult *match in matches) { if (match.resultType == NSTextCheckingTypeDate) { [dates addObject:match.date]; } } return dates.count ? [dates copy] : nil; } 

你可以像这样调用它:

 NSArray *dates = [@"402 Garcia 01/08/15 10:26 Observaciones del huésped" detectedDates]; 

您可以在NSHipster上阅读有关NSDataDetector的更多信息

这项工作总是与文本结构相同。

 NSString *text = @"402 Garcia 01/08/15 10:26 Observaciones del huésped"; // This the formatter will be use. NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"dd/MM/yy HH:mm"]; [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; // First we extract the part of the text we need. NSArray *array = [text componentsSeparatedByString:@" "]; NSString *dateString = [NSString stringWithFormat:@"%@ %@",[array objectAtIndex:2],[array objectAtIndex:3]]; // Here the search text NSLog(@"%@",dateString); // Now we use the formatter and the extracted text. NSDate *date = [formatter dateFromString:dateString]; NSLog(@"The date is: %@",[date description]);