我遇到了不同地区的NSDateFormatter问题。
我正在使用工作日从数据库中检索字符串。
//wdn is 0 for sunday //1 monday //2 ..
NSString *wd = [NSString stringWithFormat:@"%i",wdn];
然后我将字符串格式化为字母中的工作日:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"c"];
NSDate *d = [dateFormat dateFromString:wd];
[dateFormat setDateFormat:@"ccc"];
结果:
//with UK region in settings //RIGHT
//0 SUN //1 MON //2 ..
//with US region in settings //WRONG
//0 MON //1 TUE //3..
无论我选择哪个地区,我如何强制取得正确的结果?
答案 0 :(得分:1)
如果您只是想映射0 - >语言环境的“Sun”版本,您可以使用-[NSDateFormatter shortWeekdaySymbols]
。
该文档没有任何订购说明,但我先尝试使用en_US / he_IL作为星期日,然后en_UK / fr_FR作为星期一。在所有情况下,数组都返回相当于@[@"Sun", @"Mon", ...]
的语言环境,其中Sunday是第一天。
当然,如果您假设语言环境使用格里高利历,您的代码可能会失效,但这实际上超出了问题的范围,因为这可能更多地与整个应用程序的设计有关。
答案 1 :(得分:0)
- (NSString *)stringWithDayOfWeek:(NSUInteger)dayOfWeek length:(NSUInteger)length
{
NSDictionary *days = @{
@0: @"Monday",
@1: @"Tuesday",
// etc...
};
NSString *dayOfWeekStringRepresentation = days[[NSNumber numberWithInteger:dayOfWeek]];
dayOfWeekStringRepresentation = [dayOfWeekStringRepresentation substringWithRange:NSMakeRange(0, length)];
return dayOfWeekStringRepresentation;
}