2010-07-30 4 views
3

Я работаю над историческим приложением, поэтому мне нужно справиться с датой до и после JC.Проблема с отрицательной датой на iPad, а не на симуляторе

Я пытаюсь разобрать строку с формой «01/01/-200», но она возвращает нулевую дату, пока она работает с «01/01/200».

Вот мой код:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc]init] autorelease]; 
[dateFormatter setDateFormat:@"dd/MM/y"]; // @TODO Get negative date 
[dateFormatter setLenient:NO]; 

NSDate* date = [dateFormatter dateFromString:dateString]; 
return date; 

Я также попробовать использовать с формой «01/01/200 БК» setDateFormat:@"dd/MM/y G", но я не могу заставить его работать ни. Как MVDS предлагает в своем ответе, я попробовал формат «01/01/200 BC» на тренажере, и он работает ... проблема возникает только на моем IPad (версия 3.2.1)

Do у вас есть идея, как это сделать правильно?

+1

Там может быть 3-библиотека даты партии, которая может обрабатывать даты BCE, но я не знаю ни одного , поэтому я бы предположил, что если библиотека исходных дат не может ее обработать, вам, возможно, придется написать свой собственный класс оболочки Date. – FrustratedWithFormsDesigner

ответ

1

Я наконец нашел трюк. Проблема заключается в том, что мой IPad на французском языке, так что Эра имеет другой формат: «пр Ж.-К.»

  • до н.э.
  • AD - "ap. J.-C."

Так что мне просто нужно было изменить свой XML-файл, чтобы получить правильный формат при разборе.

Для того, чтобы отобразить свою дату в формате AD-BC, я просто преобразовать его позже:

+ (NSString*) convertIntoBCADString:(NSString*) originalString 
{ 
    NSString* newString = [originalString stringByReplacingOccurrencesOfString:@"av. J.-C." withString:@"BC"]; 
    return [newString stringByReplacingOccurrencesOfString:@"ap. J.-C." withString:@"AD"]; 
} 
+0

Для справки, такие проблемы можно решить с помощью следующего кода: 'NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier: @" en_US_POSIX "]; [formatter setLocale: locale]; ' –

2

Я просто попытался это:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc]init] autorelease]; 
[dateFormatter setDateFormat:@"dd/MM/y G"]; 
NSDate *date = [dateFormatter dateFromString:@"01/01/200 BC"]; 
NSLog(@"refdate %@",[dateFormatter stringFromDate:date]); 
date = [date addTimeInterval:24*3600*365*2]; 
NSLog(@"2 years later %@",[dateFormatter stringFromDate:date]); 

, который выводит:

refdate 01/01/200 BC 
2 years later 01/01/198 BC 

Это на 3.2, IPad симулятор, так что не самый последний SDK, но тем не менее, IPad. Вы получаете разные результаты, управляя этим?

+0

Это действительно странно. Ваш код работает на симуляторе, но не на моем iPad ... Я проверю, связано ли это с настройками или версиями кода iPad. Спасибо за помощь. Я думаю, вы заметили проблему. – CedricSoubrie

Смежные вопросы