Так что, похоже, я снова сгораю от поддержки календаря iPhone снова . Я столкнулся с проблемой, когда основные данные сравнивают даты. Базовые данные, похоже, хранят даты с использованием григорианского календаря в том виде, в каком они выходят в формате 20XX-MM-dd. Но когда я создаю NSP-предикат таким образом
[nsRequest setPredicate:[NSPredicate predicateWithFormat:@"publish <= %@ AND expires >= %@", [NSDate date], [NSDate date]]]
если на устройстве пользователя не установлен григорианский календарь, элементы не будут отображаться, так как данные ядра, по-видимому, не локализуют свои NSDates перед сравнением с входными датами.
Таким образом, может показаться, что если бы сегодня была дата «2011-05-31», то в японском календарном режиме базовые данные используют «0023-05-31», поскольку это 23-й год текущего императора, поэтому дата ввода будет 2000 лет до того, с чем его сравнивают.
Я обнаружил, что могу обойти это так
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0]] autorelease]];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
NSString *todayGregorian = [[dateFormat stringFromDate:[NSDate date]] retain];
[dateFormat release];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
[nsRequest setPredicate:[NSPredicate predicateWithFormat:@"publish <= %@ AND expires >= %@", [df dateFromString:todayGregorian], [df dateFromString:todayGregorian]]];
но я надеюсь, что, может быть, я идиот, и есть лучший способ. Какие-либо предложения?
Обратите внимание:
- Просить моих японских пользователей изменить
формат даты, который они используют, не является
опция.
- Кроме того, мне все еще нужно хранить
основные данные даты в григорианском
формат, как иногда делают эти пользователи
изменить свои календари обратно и
п.
Реальная проблема
Мое решение выше неверно. Ответ TechZen заставил меня задуматься, и я хотел бы проголосовать за него 100 раз, и я решил проблему.
Моя проблема заключается в том, что данные, поступающие в Core Data, отправляются сервером в GMT, и анализатор формы, что данные не обязательно должны быть в GMT, поэтому мне нужно правильно настроить время входа в Core Data.