3

我正在寻找一种将用户输入的“日期文本”(例如 3/3/1990 或 3-1-98)格式化为 NSDate 的方法。

我可以自己实现它,尝试使用各种日期格式化程序格式化文本,但我偷偷怀疑有一种更简单的方法可以做到这一点。

dateWithNaturalLanguageString:可能会起作用,但我听说这会导致应用商店拒绝?

4

3 回答 3

2

您正在寻找NSDataDetector它并返回NSTextCheckingResult对象。

于 2013-03-30T03:29:49.733 回答
1

我不确定这是否涵盖了您需要的所有内容,但是NSDateFormatter该类有一个dateFromString:方法。如果您可以识别字符串的格式并创建相应的NSDateFormatter对象,那么就可以了。

于 2013-03-30T02:05:42.123 回答
0

所以 NSDataDetector 是我的一杯茶,我确实用类方法中的一些内省 if-else 语句来暴力解决问题。如果未来土地上的任何人有兴趣:

#import "TotalStringToDateFormatter.h"

@implementation TotalStringToDateFormatter

+(NSDate*) convertString:(NSString *)string
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    NSDate* date;
    NSString* checkString;


    [dateFormatter setDateFormat:@"mm/dd/yyyy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }

    [dateFormatter setDateFormat:@"mm-dd-yyyy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }
    [dateFormatter setDateFormat:@"m/d/yyyy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }

    [dateFormatter setDateFormat:@"m-d-yyyy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }
    [dateFormatter setDateFormat:@"m/d/yy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }

    [dateFormatter setDateFormat:@"m-d-yy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }
    [dateFormatter setDateFormat:@"mm/d/yyyy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }

    [dateFormatter setDateFormat:@"mm-d-yyyy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }
    [dateFormatter setDateFormat:@"m/dd/yyyy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }

    [dateFormatter setDateFormat:@"m-dd-yyyy"];
    date = [dateFormatter dateFromString:string];
    checkString = [dateFormatter stringFromDate:date];
    if ([string isEqualToString:checkString]) {
        return date;
    }


    return nil;
}

@end

制作 withLocale 版本不会太难,但坦率地说,我不太了解 Locale 是如何编码的,目前不需要它

于 2015-02-13T21:22:43.890 回答