2012-07-10 45 views
1

我在iPhone應用程序中工作。我從webservice響應獲取日期。當我收到我在NSArray中存儲的日期。當我將NSString更改爲NSDate時,日期返回null。這裏是我的代碼,NSDateFormatter返回空值dateFromString:iPhone?

for (int k = 0; k<[dateArray count]; k++) 
{ 
    NSString *dateStr = [dateArray objectAtIndex:k]; 
    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; 
    [dateFormatter1 setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 
    [dateFormatter1 setFormatterBehavior:NSDateFormatterBehaviorDefault]; 
    [dateFormatter1 setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    NSLog(@"DateStr : %@", dateStr); //Console Output is : 2012-07-09 13:50:07 [For 42nd and above values] 
    NSDate *date = [dateFormatter1 dateFromString:dateStr]; 
    NSLog(@"Date : %@", date); // Console Output is : (null) [For 42nd and above values] 
} 

dateArray包含來自Webservice的43個日期值。 NSDateFormatter returns correct NSDate from NSString til 41nd values。當42nd string passing to the NSDateFormatter the output returns "(null)".我試過當日期再次返回空我再次轉換dateFromString "(null)"錯誤發生。任何人都可以請幫我解決這個問題嗎?提前致謝。

+0

第42個值中的字符串是什麼?你有沒有檢查過它是一個有效的日期和正確的格式? – 2012-07-10 15:02:37

+0

@NickBull謝謝。這是數組「2012-07-09 13:50:07」中的字符串。我已將這個值並轉換爲NSDate在類中的其他位置使用相同的NSDateFormatter。它返回確切的NSDate。這是有效的。你能幫我解決這個問題嗎?謝謝。 – Gopinath 2012-07-10 15:04:33

+0

在NSDate * date = [dateFormatter1 dateFromString:dateStr]之前的行中添加'NSLog(@「DateStr:%@」,dateStr);'然後使用控制檯輸出編輯您的問題 – 2012-07-10 15:07:51

回答

10

嘗試使用大寫'HH'而不是'hh'。 hh是1-12小時,HH是0-23小時 - 也許是13:00正在投擲它?

+0

沒有發現...好的工作 – aopsfan 2012-07-10 15:29:51

+0

非常感謝。我已經解決了這個問題。再次感謝。 – Gopinath 2012-07-10 15:33:38

+1

BRILLIANT !!!不知道 – jsetting32 2013-04-25 19:30:12

2

嘗試在每個地方使用相同的NSDateFormatter,並循環遍歷forin循環。你正在以現在使用的方式泄漏大量的記憶。我不能保證這會解決你的問題,但至少它會清理你的代碼。

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 

for (NSString *dateString in dateArray) { 
    NSLog (@"Date %@ and index %i: NSDate representation is %@", dateString, [dateArray indexOfObject:dateString], [dateFormatter dateFromString:dateString]); 
} 

如果這沒有解決您的問題,記住幾件事情:

  1. 不要對你的日期格式的timeZone。字符串不包含時區,因此它不會執行任何操作。
  2. 不要設置formatterBehavior。它自動爲NSDateFormatterBehaviorDefault
  3. 確保前41個日期和其他日期沒有任何內在差異。
+0

感謝您的回答。我已經從Gamozzii先生的回答中解決了這個問題。謝謝你的努力。 – Gopinath 2012-07-10 15:34:10

0

使用 「YYYY-MM-DD HH:MM:SS」 格式而不是 「YYYY-MM-DD HH:MM:SS」

hh表示小時1-12,HH是小時0 -23。你有0-23格式的小時。

[dateFormatter1 setDateFormat:@「yyyy-MM-dd HH:mm:ss」];