2015-01-09 64 views
1

我沒有能力在Xcode中來解決此問題:提取從複雜的NSString日期

我有這樣的文字:

「402 加西亞 15年1月8日10:26 「

我想提取我確定的日期是GMT +0,然後添加手機格林尼治標準時間例如格林尼治標準時間+1,並用NSString中的新日期替換舊日期。

的GMT東西我剛剛解決它在另一個地方,所以我只需要提取和字符串替換日期字符串,所以我最終的結果是這樣的:

「402 加西亞 01/08/15 11:26 Observedciones delhuésped「

任何幫助將不勝感激,並提前致謝。

回答

6

這正是NSDataDetector的原因。

@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; 
} 

你可以叫它像這樣:

我在NSString的類別上進行的方法

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

你可以閱讀更多關於NSDataDetector超過NSHipster

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