Cocoa iPad上的日期为负数,模拟器上的日期为负数

Cocoa iPad上的日期为负数,模拟器上的日期为负数,cocoa,ipad,date,nsdateformatter,Cocoa,Ipad,Date,Nsdateformatter,我正在开发一个历史应用程序,所以我需要处理JC前后的日期 我试图解析一个格式为“01/01/-200”的字符串,但它在处理“01/01/200”时返回空日期 这是我的密码: NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc]init] autorelease]; [dateFormatter setDateFormat:@"dd/MM/y"]; // @TODO Get negative date [dateFormatter s

我正在开发一个历史应用程序,所以我需要处理JC前后的日期

我试图解析一个格式为“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/200BC”
setDateFormat:@“dd/MM/y G”
格式,但我也无法使其工作。 正如mvds在他的回答中所建议的那样,我在模拟器上尝试了“01/01/200BC”格式,它正在工作该问题仅出现在我的iPad上(3.2.1版)

您知道如何正确地执行此操作吗?

我刚刚尝试了以下方法:

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。运行这个程序会得到不同的结果吗?

我终于找到了窍门。 问题是,我的iPad是法语的,所以这个时代有不同的格式:

  • BC是“av.J.-C.”
  • 广告是“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"]; 
}

可能有第三方日期库可以处理BCE日期,但我不知道有哪一个,所以我想如果本机日期库不能处理它,您可能必须编写自己的日期包装类。这真的很奇怪。你的代码可以在模拟器上运行,但不能在我的iPad上运行。。。我会检查它是否与我的iPad的设置或代码版本有关。谢谢你的帮助。我认为您已经发现了问题。作为参考,类似的问题可以通过以下代码解决:
NSLocale*locale=[[NSLocale alloc]initwithlocaleidentier:@“en_US_POSIX”];[格式化程序setLocale:locale]