问候,
最近,我在 NSCalendar 课程中遇到了一个大问题(在我看来)。
在我的任务中,我需要处理从公元前 4000 年到公元 2000 年(公历)的较长时间段。在某些地方,我被迫以 100 年的间隔增加一些 NSDate。当在 AD 时间轴(0->...)中增加年份时,一切正常,但是当我用 BC 尝试同样的事情时,我有点困惑。
问题是,当您尝试将 100 年添加到 3000BC [edited] 年份时,无论如何都会得到 3100BC [edited] ... 我个人觉得这很奇怪且不合逻辑。正确的结果应该是 2900BC。
下面是代码示例,您可以看到这种“不正确”的行为:
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
// initing
NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease];
[comps setYear:-1000];
NSDate *date = [gregorian dateFromComponents:comps];
// math
NSDateComponents *deltaComps = [[[NSDateComponents alloc] init] autorelease];
[deltaComps setYear:100];
date = [gregorian dateByAddingComponents:deltaComps toDate:date options:0];
// output
NSString *dateFormat = @"yyyy GG";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:dateFormat];
NSLog(@"%@", [formatter stringFromDate:date]);
你对这种行为有什么看法?这是它应该如何工作还是这是一个错误?我很困惑:S。
顺便说一句。:方法 [NSCalendar components:fromDate:toDate:options:] 不允许我们计算公元前时代的年份之间的差异......额外的“为什么?” 在这个潘多拉的盒子里。
PS:我正在挖掘官方文档和其他资源,但没有发现关于这个问题的任何内容(或者它可能是为了工作而我是个白痴?)。