2012-07-23 45 views
1

我正在使用xcode,目標c和目標ios 5最小的iphone應用程序。 我所要做的就是將字符串轉換爲日期。我已經閱讀過很多,它應該是一個簡單而直接的任務。我在論壇上看到過許多其他類似的問題,但是爲人們工作的東西似乎不適合我。 下面是我在做什麼nsformatter dateFromString是零

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSString *dobText = [dict valueForKey:@"DateOfBirth"]; 
NSDate *dobDate = [dateFormatter dateFromString:dobText]; 

的dobText總是在格式@「1999-01-01」使用日期從字符串時總是無相匹配的日期格式的日期格式設置,但結果。

任何人都可以解釋這一點給我,讓我知道如何解決它?

+1

的代碼應該工作。如果你手動設置dobText(dobText = @「1999-01-01」;) – vakio 2012-07-23 11:33:12

+0

是的,即使手動輸入到dobText或甚至到[dateFormatter dateFromString:@「1999-01-01」]; – glogic 2012-07-23 11:34:44

+0

它看起來不錯,但是如果您在後臺線程中使用NSDateFormatter,則會出現一些問題。你在做那個嗎? http://stackoverflow.com/questions/5638416/datefromstring-always-returns-null-with-dateformatter – 2012-07-23 11:44:52

回答

0

你確定日期在你從字典中得到的數據中使用的是-而不是。我可以重現無結果當我使用一個(ALT + - )

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
    NSString *dobText = @"2009-02-12"; 
    NSDate *dobDate = [dateFormatter dateFromString:dobText]; 
    NSLog(@"%@", dobDate); 

嘗試這樣做,可能會解決您的問題。

NSString *dobText = [[dict valueForKey:@"DateOfBirth"] stringByReplacingOccurrencesOfString:@"—" withString:@"-"]; 
0

看看你的設備上的用戶喜好。該文件說:

注意的是,雖然在 原則上設置一個格式字符串(setDateFormat :)指定一個確切的格式,在實踐中可能仍然 也可以通過用戶的覆蓋偏好,看到Data Formatting Guide 瞭解更多詳情。

0

我懷疑像bigkm說,你的破折號可能會妨礙你。

我建議你先嚐試一個虛擬字符串。例如

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSString *dobText = @"1999-01-01" // [dict valueForKey:@"DateOfBirth"]; 
NSDate *dobDate = [dateFormatter dateFromString:dobText]; 

現在確實有效嗎?這應該。現在三角另一種方式:

  1. 從DOB文字完全刪除破折號,使之具有格式爲「年月日」
  2. 將日期格式看看這個相同的格式

這是否工作?這應該。這將證明您的格式中的分隔符是問題,需要進一步檢查(或按照大公司的建議進行清理)。

副節點重新線程化:如果您在創建它的線程上使用它,NSDateFormatter會很好。如果你不知道,你會知道該應用程序會崩潰。

0

如果您的日期格式正確,我可以建議將NSLocale設置爲您的NSDateFormatter。

對於我這個代碼工作的模擬器:

NSString *format = [NSString stringWithFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"]; 
NSDateFormatter *df = [NSDateFormatter new]; 
[df setDateFormat:format]; 
NSDate *date = [df dateFromString:pubDateSttring]; 

,但對設備日期始終爲零。設置NSLocale的

我找到了解決方法:

df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];