NSDateFormatter与apple.cn截图不同

时间:2014-10-12 04:45:42

标签: ios objective-c localization nsdateformatter

http://apple.com/iphone的iPhone在esoteric reasons的状态栏中有9:41 AM。我正在尝试为我的应用制作本地化的屏幕截图,因此我咨询了http://apple.com/cn/iphone,他们始终如一地使用上午9:41。但是,当我使用zh-Hans标记将我的区域设置设置为zh-Hant-AppleLanguages时,NSDateFormatter会吐出9:41 上午。这是我正在使用的代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSString *originalLocale = dateFormatter.locale;
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
[dateFormatter setDateFormat:@"h:mm a"];
NSDate *date = [dateFormatter dateFromString:@"9:41 AM"];
dateFormatter.locale = originalLocale;

NSString *dateString = [dateFormatter stringFromDate:date];

此代码在en_US中生成正确的格式,但在zh-Hant中生成错误的格式。有没有办法获得@"h:mm a"的本地化版本,除了为每种语言编写硬编码?

1 个答案:

答案 0 :(得分:2)

请勿设置dateFormat,请设置timeStyle以访问相应的内置格式。 NSDateFormatterMediumStyle对我来说是正确的。如果你想要它还有dateStyle

所以,示例代码:

NSDateFormatter *newformatter = [NSDateFormatter new];
newformatter.locale = [NSLocale localeWithLocaleIdentifier:@"zh-Hant"]; 
newformatter.timeStyle = NSDateFormatterMediumStyle;
NSLog(@"%@", [newformatter stringFromDate:[NSDate date]]);

输出:

上午12:10:40