使用NSDataDetector进行NSDate检测

我试图从UNSSNOWN格式的NSString中获得一个NSDate,所以我写了一个像下面这样的函数

-(void)dateFromString:(NSString*)string { NSError *error = NULL; NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:(NSTextCheckingTypes)NSTextCheckingTypeDate error:&error]; NSArray *matches = [detector matchesInString:string options:0 range:NSMakeRange(0, [string length])]; NSLocale* currentLoc = [NSLocale currentLocale]; for (NSTextCheckingResult *match in matches) { if ([match resultType] == NSTextCheckingTypeDate) { NSLog(@"Date : %@", [[match date] descriptionWithLocale:currentLoc]); } } } 

除了一个地方,它运作良好。

如果我调用

 [self dateFromString:@"6/12"]; 

它打印

date:2014年6月12日星期四12:00:00澳大利亚东部标准时间

同时,如果我打电话

 [self dateFromString:@"13/12"]; 

它打印

date:2013年12月13日星期五下午12:00:00澳大利亚东部夏令时间

基本上,我想要的functionperformance一致。 因为我住在澳大利亚,所以应该在12月6日回来执行。 第二个调用结果是正确的。

我在这里做错了什么?

其实,我写的方法工作得很好:)。 不幸的是,我的testing手机中的区域格式被设置为美国,并且从未回到澳大利亚:我的不好。

@ joiningss:把一些随机的格式化的datestring扔到那个方法中,你会惊讶的发现,苹果是如何让开发者容易的。 无论如何,非常感谢你。

Chadda&Greg:谢谢你们。 我非常感谢你的帮助。

你必须使用NSDateFormatter。 尝试replace你的if语句:

 if ([match resultType] == NSTextCheckingTypeDate) { NSDate *dateAfter = [match date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"]; NSString *formattedDateString = [dateFormatter stringFromDate:dateAfter]; NSLog(@"After: %@", formattedDateString); } 

如果要以不同的格式显示,则必须将此行更改为所需的格式:

 [dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"]; 

如果你希望它匹配你的第一个例子,将其更改为:

 [dateFormatter setDateFormat:@"EEEE, MMMM dd, yyyy 'at' HH:mm:ss a zzzz"];