3
    NSDateFormatter *timeFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [timeFormatter setDateFormat:@"h:mm a"];
    NSString *fullTime = [timeFormatter stringFromDate:someDateHere];
    NSArray *timeParts = [fullTime componentsSeparatedByString:@" "];
    timeLabel.text = [timeParts objectAtIndex:0];
    ampmLabel.text = [timeParts objectAtIndex:1];

最后一行崩溃

    NSRangeException*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]

这怎么可能?在此代码之前返回的日期有一个 nil 检查。

4

2 回答 2

3

从数据格式指南文档(日期格式化程序>使用格式字符串指定自定义格式>固定格式部分):

尽管原则上格式字符串指定了固定格式,但默认情况下 NSDateFormater 仍会考虑用户的偏好(包括区域设置)。... 在 iOS 中,用户可以覆盖默认的 AM/PM 与 24 小时时间设置。这可能会导致 NSDateFormatter 重写您设置的格式字符串。

换句话说,在设置为 24 小时时间设置的 iOS 设备上,即使您指定了“h:mm a”,您也不会得到“6:02 PM”,而是会得到“18:02”。因此,当您用空格分隔时,您会返回一个值“18:02”,而不是两个值。

于 2012-05-16T01:06:24.793 回答
1

NSDateFormatter的文档中有一个警告说:

请注意,虽然设置格式字符串setDateFormat:

这是否适用于您的情况以生成没有任何空格的字符串?(当被空格分割时,这将导致长度为 1 的数组,在您看到它的地方给出您看到的异常。)通过记录格式化日期或附加调试器来检查这一点。

请注意,日期格式页面strftime_l的末尾确实建议在处理未本地化的日期/时间时使用普通旧的。那可能更适合你。(此外,您希望在绑定到计算机的数据中使用 AM/PM 指示器?说真的?24 小时制通常更容易使用……)

于 2012-05-16T01:13:21.780 回答