我正试图在不列颠哥伦比亚省时代创建一个约会,但是很难失败。以下返回'4713'作为年份,而不是'-4712':
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [NSDateComponents new];
[components setYear: -4712];
NSDate *date = [calendar dateFromComponents:components];
NSLog(@"%d", [[calendar components:NSYearCalendarUnit fromDate: date] year]);
知道我做错了吗?
更新:工作代码
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [NSDateComponents new];
[components setYear: -4712];
NSDate *date = [calendar dateFromComponents:components];
NSDateComponents *newComponents = [calendar components:NSEraCalendarUnit|NSYearCalendarUnit fromDate:date];
NSLog(@"Era: %d, year %d", [newComponents era], [newComponents year]);
这个时代打印0,就像Ben解释的那样。
答案 0 :(得分:6)
您的代码实际上工作正常。由于没有零年,-4712是公元前4713年。如果您检查时代组件,您将看到它为零,在公历中表示BC。翻转这个负号,你会看到4712 AD(时代1)。