ユーザーが入力した「日付テキスト」(1990 年 3 月 3 日や 98 年 3 月 1 日など) を NSDate としてフォーマットする方法を探しています。
さまざまな日付フォーマッタでテキストをフォーマットしようとして自分で実装することもできますが、これを行うためのはるかに簡単な方法があるのではないかと密かに疑っています。
dateWithNaturalLanguageString:おそらく動作するでしょうが、アプリ ストアから拒否されるという噂を聞いたことがありますか?
ユーザーが入力した「日付テキスト」(1990 年 3 月 3 日や 98 年 3 月 1 日など) を NSDate としてフォーマットする方法を探しています。
さまざまな日付フォーマッタでテキストをフォーマットしようとして自分で実装することもできますが、これを行うためのはるかに簡単な方法があるのではないかと密かに疑っています。
dateWithNaturalLanguageString:おそらく動作するでしょうが、アプリ ストアから拒否されるという噂を聞いたことがありますか?
これで必要なものがすべてカバーされるかどうかはわかりませんが、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 がどのようにコーディングされているかはよくわかっておらず、現時点ではその必要はありません。