从复杂的NSString中提取日期

时间:2015-01-09 13:01:39

标签: ios objective-c string date nsstring

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

我有这样的文字:

“402 加西亚 01/08/15 10:26 Observaciones delhuésped“

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

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

“402 加西亚 01/08/15 11:26 Observaciones delhuésped“

任何帮助都将受到赞赏并提前致谢。

2 个答案:

答案 0 :(得分:6)

这正是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的更多信息

答案 1 :(得分:0)

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

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]);