1

我在 iPhone 应用程序中工作。我正在从网络服务响应中获取日期。当我收到我存储在 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 values。_ 当42nd string passing to the NSDateFormatter the output returns "(null)".我尝试当日期再次返回 null 时,我再次转换 dateFromString"(null)"发生错误。谁能帮我解决这个问题?提前致谢。

4

3 回答 3

10

尝试使用大写字母“HH”而不是“hh”。hh 是 1-12 小时,HH 是 0-23 小时 - 也许 13:00 正在抛出它?

于 2012-07-10T15:26:49.530 回答
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 个日期和其他日期没有本质上的不同。
于 2012-07-10T15:29:22.413 回答
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"];

于 2013-09-04T11:38:10.943 回答