2012-02-09 139 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