NSDateFormatter и японский календарь - PullRequest
3 голосов
/ 13 января 2011

У меня проблемы с использованием NSDateFormatter, когда пользователь не использует григорианский календарь в качестве календаря по умолчанию для iPhone.

NSString *testString = @"2011-01-14";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];
NSDate *eventDate = [dateFormat dateFromString:testString];
[dateFormat setDateFormat:@"yyyy-MM-dd(EEE)"];
NSString *dateAndLocString = [dateFormat stringFromDate:eventDate];
[dateFormat release];

На устройстве, использующем григорианский календарь, dateAndLocString будет равно 2011-01-13 (чт) Но когда пользователь использует японский календарь, dateAndLocString будет равен 2011-01-13 (ср.), Что неверно.

Кто-нибудь знает, что я могу делать неправильно

1 Ответ

4 голосов
/ 13 января 2011

Я нашел способ заставить это работать правильно, если у кого-то есть лучшее предложение, пожалуйста, дайте мне знать. Мы должны установить предпочтительного локального пользователя в NSDateFormatter, используя следующую строку кода.

[dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0]] autorelease]];

Это обеспечит правильную локаль пользователя для NSDateFormatter. У некоторых людей может возникнуть соблазн использовать

[dateFormat setLocale:[NSLocale currentLocale]];

Но это не будет работать, поскольку [NSLocale currentLocale] в системе с японским календарем возвращает en_US @ calendar = japanese, даже если пользовательский язык установлен на японский.

Понятия не имею, почему NSDateFormatter не работает автоматически с негригорианскими календарями.

...