NSDateFormatter返回null值dateFromString:iPhone?

时间:2012-07-10 15:00:57

标签: iphone ios nsstring nsdate nsdateformatter

我在iPhone应用程序中工作。我从webservice响应中获取日期。当我收到我在NSArray中存储的日期时。当我将NSString更改为NSDate时,日期返回null。这是我的代码,

  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 values42nd string passing to the NSDateFormatter the output returns "(null)".。当"(null)"我尝试过,当日期再次返回null时,我再次转换dateFromString,发生{{1}}错误。有谁可以帮我解决这个问题?提前谢谢。

3 个答案:

答案 0 :(得分:10)

尝试使用大写'HH'而不是'hh'。 ......小时1-12小时,HH小时0-23小时 - 也许13点是扔它?

答案 1 :(得分: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个日期和其他日期没有任何本质上的不同。

答案 2 :(得分: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”];