2012-02-09 89 views
2

我知道这里有很多NSDateFormatter问题,所以如果我复制,我很抱歉。我无法找到任何与我所要求的完全相同的东西。通过NSDateFormatter从未知格式的字符串获取NSDate

从这里所有的问题来看,我得出结论,-[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

回答

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解析未知的字符串做这绝对是硬办法。只需将文本字段的'inputView'属性设置为包含选择器的视图即可。我在这里发布了一个这样的类的例子。(http://stackoverflow.com/a/8978326/927947)向类中添加一个'NSDateFormatter'可以很容易地格式化显示的字符串文本字段,并在稍后阅读它的值。 – NJones 2012-02-09 20:21:55

+0

@sasquatch考虑到可能的日期格式的丰富性和复杂性,实际上不可能猜测日期的格式。只需使用'UIDatePicker'。 – Costique 2012-02-10 09:38:25

+0

这确实是最有意义的。我没有想到这一点,但读这个答案是“doh!”时刻。谢谢你们,不幸的是,日期格式化程序没有这种可能性,虽然 – sasquatch 2012-02-10 15:55:32

1

尽管我与@Jaybit达成一致意见,您可能需要丢弃文本框并使用更好的输入,但是对于这个特定问题的答案在于某些狡猾的字符串解析。无论何时你在做字符串解析,RegEx都是你的朋友。 Web开发人员最终不得不一直这样做。这个例子是在JavaScript,但正则表达式应该是足够便携,它工作在ObjC:

http://www.codingoptimist.com/2009/07/using-javascript-and-regex-to-parse.html

您可以RegExKitNSRegularExpression

+0

虽然我是正则表达式的权力和用途的粉丝,但我不认为这是他们的地方。正如接受的答案中提到的那样,如果有更简单的解决方案,那将会非常复杂。 – sasquatch 2012-02-10 19:33:11

+0

我欣喜若狂,有人真的看着我的博客文章,甚至更多,所以他们认为这是值得链接。感谢slf! – Jerry 2012-02-15 05:16:35