1

我正在使用下面的代码。

NSString * weekdayString = [[self date] descriptionWithLocale:@"%A"];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:usLocale];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
dateString = [NSString stringWithFormat:@"%@,%@",weekdayString,[dateFormatter stringFromDate:[self date]]];
NSArray * components = [dateString componentsSeparatedByString:@","];
dateString = [NSString stringWithFormat:@"%@,%@",[components objectAtIndex:0],[components objectAtIndex:1]];

它在模拟器和 ios 6.0 中运行良好,但在设备(iPad)中的 ios 5.1 中没有按预期显示。

4

1 回答 1

2

NSDate -descriptionWithLocale有文件证明采取NSLocale; 您正在传递一个NSString因此依赖于无证行为。

还不清楚您要通过拆分为组件来实现什么 - 大概您已经假设 NSDateFormatterShortStyle 将始终包含逗号?文档也不能保证这一点。

您可能想要做的只是设置一个自定义日期格式字符串。从您帖子的标题看来,您可能想要EEEE, MMMM dd。所以例如

// see QA1480 re: en_US_POSIX
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:usLocale];
[dateFormatter setDateFormat:@"EEEE, MMMM dd"];
dateString = [dateFormatter stringFromDate:[self date]];

QA1480解决了可能导致NSDateFormatter在内部静默调整日期格式化程序的问题。

于 2013-02-05T07:43:34.083 回答