此代码适用于我可以确定的每个区域/区域设置组合除非我将手机设置为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”。
答案 0 :(得分:5)
您正在解析RFC 3339 / ISO 8601日期。因此,您应将格式化程序的locale
设置为en_US_POSIX
。
theDateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];