NSDateFormatter和区域格式工作日

时间:2014-03-25 18:18:06

标签: ios nsdateformatter

我遇到了不同地区的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..

无论我选择哪个地区,我如何强制取得正确的结果?

2 个答案:

答案 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;
}