Как создать конкретную дату в далеком прошлом, в эпоху до нашей эры - PullRequest
6 голосов
/ 27 апреля 2010

Я пытаюсь создать дату в эпоху до н.э., но проваливаюсь довольно сильно. Следующее возвращает «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 для эры, как объяснил Бен.

1 Ответ

6 голосов
/ 27 апреля 2010

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

...