Как создать определенную дату в удаленном прошлом, эра BC

Я пытаюсь создать дату в эру 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 объяснил.

6
задан alloy 27 April 2010 в 14:16
поделиться

1 ответ

Ваш код действительно работает нормально. Поскольку нулевого года нет, -4712 - это 4713 год до нашей эры. Если вы проверите компонент эры, вы увидите, что это ноль, что в григорианском календаре означает до нашей эры. Переверните этот отрицательный знак, и вы увидите 4712 год нашей эры (эра 1).

6
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: