6

我正在尝试在 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。

4

1 回答 1

6

您的代码实际上工作正常。由于没有零年,-4712 是公元前 4713 年。如果您检查时代组件,您会看到它为零,这在公历中表示 BC。翻转那个负号,你会看到公元 4712 年(时代 1)。

于 2010-04-27T14:00:50.520 回答