Я пытаюсь создать дату в эру BC, но сбой довольно трудно. Следующие возвраты ‘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 объяснил.
Ваш код действительно работает нормально. Поскольку нулевого года нет, -4712 - это 4713 год до нашей эры. Если вы проверите компонент эры, вы увидите, что это ноль, что в григорианском календаре означает до нашей эры. Переверните этот отрицательный знак, и вы увидите 4712 год нашей эры (эра 1).