3

我正在处理一个历史应用程序,所以我需要处理 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/200 BC”形式,setDateFormat:@"dd/MM/y G"但我不能让它工作。正如 mvds 在他的回答中所建议的那样,我在模拟器上尝试了格式“01/01/200 BC”,它正在工作......问题仅出现在我的 iPad(版本 3.2.1)上

你知道如何正确地做到这一点吗?

4

2 回答 2

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

于 2010-07-30T21:00:36.630 回答
1

我终于找到诀窍了。问题是我的 iPad 是法语的,所以 Era 有不同的格式:

  • BC 是“av. J.-C”。
  • 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"]; 
}
于 2010-08-16T12:18:10.777 回答