日期格式化程序在某些情况下返回null(在12:59:59之后)

时间:2015-07-14 08:33:40

标签: ios objective-c json nsdateformatter

我收到了JSON响应。

{
        0 = 50;
        1 = 1;
        2 = 4;
        3 = "08:51:00";
        4 = "20:51:00";
        Id = 50;
        day = 4;
        endTime = "20:51:00";
        openTime = "08:51:00";
        venId = 1;

我使用日期格式化程序将字符串转换为日期,然后使用此代码转换为适当的字符串格式。

NSDateFormatter * DateFormat = [[NSDateFormatter alloc] init];
[DateFormat setDateFormat:@"hh:mm:ss"];

NSDateFormatter * recevingDateFormatter = [[NSDateFormatter alloc] init];
[recevingDateFormatter setDateFormat:@"hh:mm aa"];

NSDate * openTime = [DateFormat dateFromString:[[_arrHoursOfOpr objectAtIndex:indexPath.row] objectForKey:@"openTime"]];
NSDate * endTime = [DateFormat dateFromString:[[_arrHoursOfOpr objectAtIndex:indexPath.row] objectForKey:@"endTime"]];
NSLog(@"the start time and end time is %@, %@", openTime, endTime);
objCell.txtDay.text =  [_arr_weekdays objectAtIndex:[[[_arrHoursOfOpr objectAtIndex:indexPath.row]objectForKey:@"day"] integerValue]];
objCell.txtStartTime.text = [recevingDateFormatter stringFromDate:openTime];
objCell.txtEndTime.text =[recevingDateFormatter stringFromDate:endTime];

但不知何故" openTime"正在转换和" endTime"正在返回null。

对于12:59:59以上的所有字符串都会发生这种情况,即从13:00:00开始。

如何在12:59:59之后解决问题和支持时间?

1 个答案:

答案 0 :(得分:3)

hh表示[1-12]范围内的小时数。

  

小时[1-12]。当在骨架数据中或在API中传递的骨架中用于灵活的日期模式生成时,它应该与区域设置(h或K)优选的12小时循环格式匹配;它不应该与24小时循环格式(H或k)匹配。使用hh进行零填充。

特别是"它不应该与24小时循环格式相匹配"对你来说很重要,因为你实际上想要明确地匹配24小时制。

您需要使用HH支持13个小时以上

  

小时[0-23]。当在骨架数据中或在API中传递的骨架中用于灵活的日期模式生成时,它应该与区域设置(H或k)优选的24小时循环格式匹配;它不应该与12小时循环格式(h或K)匹配。使用HH进行零填充。

请参阅unicode docs