2012-07-10 69 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”];