NSDateFormatter无法在12小时制设置时返回英国地区的日期时间

时间:2015-12-08 18:27:11

标签: ios objective-c nsdateformatter

此代码适用于我可以确定的每个区域/区域设置组合除非我将手机设置为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小时时钟格式时间'a.m.'或'p.m.'美国12小时时钟将它们格式化为“AM”或“PM”。

1 个答案:

答案 0 :(得分:5)

您正在解析RFC 3339 / ISO 8601日期。因此,您应将格式化程序的locale设置为en_US_POSIX

theDateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

请参阅Apple Technical Q&A 1480