我正在寻找一种将用户输入的“日期文本”(例如 3/3/1990 或 3-1-98)格式化为 NSDate 的方法。
我可以自己实现它,尝试使用各种日期格式化程序格式化文本,但我偷偷怀疑有一种更简单的方法可以做到这一点。
dateWithNaturalLanguageString:可能会起作用,但我听说这会导致应用商店拒绝?
我正在寻找一种将用户输入的“日期文本”(例如 3/3/1990 或 3-1-98)格式化为 NSDate 的方法。
我可以自己实现它,尝试使用各种日期格式化程序格式化文本,但我偷偷怀疑有一种更简单的方法可以做到这一点。
dateWithNaturalLanguageString:可能会起作用,但我听说这会导致应用商店拒绝?
您正在寻找NSDataDetector
它并返回NSTextCheckingResult
对象。
我不确定这是否涵盖了您需要的所有内容,但是NSDateFormatter
该类有一个dateFromString:
方法。如果您可以识别字符串的格式并创建相应的NSDateFormatter
对象,那么就可以了。
所以 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 是如何编码的,目前不需要它