我知道这里有很多NSDateFormatter
个问题,所以如果我复制,我很抱歉。我找不到任何我想要的东西。
根据SO的所有问题,我得出的结论是,如果您的格式化程序对象没有正确的日期格式,-[NSDateFormatter dateFromString:]
将始终返回NULL
。如果您不知道格式,如何从字符串中获取日期?我正在尝试从UITextField
获取约会。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setLenient:YES];
NSDate *tempDate = [formatter dateFromString:self.birthdayTxtfld.text];
self.currentCustomer.birthday = ([self.birthdayTxtfld.text isEqualToString:@""]) ? NULL : tempDate;
[formatter release];
tempDate
始终为NULL
。
答案 0 :(得分:3)
我认为你采取了错误的做法。另一方面,我会限制和格式化UITextField,以便用户必须以特定格式输入日期。或者只使用日期选择器。用户也可以提供不同的输入。
或者您可以通读:NSDate
另一种选择是创建一个接受的日期格式列表:
#define DATEFORMATS @[@"MM/dd/yyyy", @"MM/dd/yy",...
然后有一个方法将日期字符串传递给并检查是否可以格式化它:
+ (NSDateFormatter*)getDateFormat:(NSString*)dateString {
NSArray *dateFormats = DATEFORMATS;
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSDate *date = nil;
for (NSString *dateFormat in dateFormats) {
[formatter setDateFormat:dateFormat];
date = [formatter dateFromString:dateString];
if (date) {
return formatter;
}
}
return nil;
}
如果你没有约会,那就不是约会,也不是你不支持的格式。否则,您将拥有所需的正确格式。您可以切换它以返回日期而不是格式。我这样做是因为我需要的格式不是项目的日期。
答案 1 :(得分:1)
虽然我同意@Jaybit你可能需要放弃文本框并使用更好的输入,但这个特定问题的答案在于一些狡猾的字符串解析。无论何时进行字符串解析,RegEx都是您的朋友。 Web开发人员最终不得不一直做这个垃圾。这个例子是在JavaScript中,但RegEx应该足够便携,以便在ObjC中工作:
http://www.codingoptimist.com/2009/07/using-javascript-and-regex-to-parse.html
执行此操作