此代码适用于我可以确定的每个区域/区域设置组合,如果我将手机设置为12小时制设置的英国区域.谁能告诉我为什么?
这适用于包括英国在内的每个地区设置12小时制:
NSDateFormatter *theDateFormatter = [[NSDateFormatter alloc] init]; theDateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"; NSString *theLastFetchDateString = @"2015-11-13T01:47:52.4630000Z"; NSDate *theLastFetchDate = [theDateFormatter dateFromString:theLastFetchDateString];
这适用于除英国以外的每个地区12小时制:
NSDateFormatter *theDateFormatter = [[NSDateFormatter alloc] init]; theDateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"; NSString *theLastFetchDateString = @"2015-11-13T18:14:44.1230000Z"; NSDate *theLastFetchDate = [theDateFormatter dateFromString:theLastFetchDateString];
在第二种情况下,LastFetchDate总是为零.
我看到的主要区别是第二个日期以24小时格式存储,其中解析设备是12小时格式,但格式化程序HH应该能够处理,是吗?
另一个奇怪的事情,它可能只是一个展示的东西,英国12小时时钟格式时间与'上午'或'下午'美国12小时时钟格式为'上午'或'下午'.
您正在解析RFC 3339/ISO 8601日期.因此,您应该将locale
格式化程序设置为en_US_POSIX
.
theDateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
请参阅Apple Technical Q&A 1480.