使用NSDataDetector进行NSDate检测

Bav*_*van 9 objective-c nsdate ios nsregularexpression nsdatadetector

我试图从UNKNOWN格式的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]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

如果我调用

[self dateFromString:@"6/12"];
Run Code Online (Sandbox Code Playgroud)

它打印

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

如果我打电话的话

[self dateFromString:@"13/12"];
Run Code Online (Sandbox Code Playgroud)

它打印

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

基本上,我希望函数表现一致.由于我住在澳大利亚,它应该在12月6日返回首次执行.第二次通话结果是正确的.

我在这做错了什么?

Bav*_*van 5

实际上,我写的方法效果很好:).不幸的是,我的测试手机中的区域格式设置为美国,并且从未回到澳大利亚:我的不好......

@joiningss:向这些方法抛出一些随机格式化的日期字符串,你会惊讶于苹果如何让开发人员轻松.无论如何,非常感谢你.

@ mrt,Chavda&Greg:非常感谢你们.我非常感谢你的帮助.